鱼C论坛

 找回密码
 立即注册
查看: 2334|回复: 6

[已解决]关于鱼c的《零基础学python》第二版中的一个疑问

[复制链接]
发表于 2021-2-28 23:05:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大家好.我是买了鱼c的《零基础学python》自学python中的
就文件操作的章节中有一个疑问.不知道是python版本更新问题,还是因为书的内容问题.
先上代码吧
>>>f=open(r"C:\Users/goodb\Destop\record.txt")
>>>f.write("这是一段待写入的数据")
以上代码显示错误信息
>>>f=open(r"C:\Users/goodb\Destop\record.txt","w")
>>>f.write("这是一段待写入的数据")
是在python的官方IDLE环境进行的.内容章节8.1.5
主要是疑问,集中在.这个open(r"C:\Users/goodb\Destop\record.txt")。 这个r里面.不清楚是什么用的.而且在idle中,按鱼c的代码,也无法运行.已经检查过,不是地址的问题.
最后我是删除了鱼c代码里的r
正常了
最佳答案
2021-3-1 00:36:59
前面加上‘r’, 是为了告诉编译器这个字符串不要转意 '\'
这么说你可能还不理解,直接上IDLE代码运行实例
>>> print('\t\n\n\t123')
        

        123
>>> print(r'\t\n\n\t123')
\t\n\n\t123
这样能不能看懂?
不加r,字符串\t会转意为tab分隔符,\n转意为换行符
加r,则不转意,还保留反斜杠
open(路径,方式),路径中可能会存在多个反斜杠,因此最好是前面加r,方式如果为空,默认为只读模式(其他方式自行百度吧)
你代码中错误,是因为方式为空,即默认为只读模式
只读模式write方法写入数据还能不报错吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-1 00:34:36 | 显示全部楼层
你的Python版本?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-1 00:36:59 | 显示全部楼层    本楼为最佳答案   
前面加上‘r’, 是为了告诉编译器这个字符串不要转意 '\'
这么说你可能还不理解,直接上IDLE代码运行实例
>>> print('\t\n\n\t123')
        

        123
>>> print(r'\t\n\n\t123')
\t\n\n\t123
这样能不能看懂?
不加r,字符串\t会转意为tab分隔符,\n转意为换行符
加r,则不转意,还保留反斜杠
open(路径,方式),路径中可能会存在多个反斜杠,因此最好是前面加r,方式如果为空,默认为只读模式(其他方式自行百度吧)
你代码中错误,是因为方式为空,即默认为只读模式
只读模式write方法写入数据还能不报错吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-1 01:26:36 | 显示全部楼层
本帖最后由 suzuki_lm 于 2021-3-1 01:28 编辑 [/i]
>>>print("C:\Users")
#会出错
>>>print("C:\\Users")
#正常运行
>>>print(r"C:\Users")
#正常运行

这三个代码都试一试就知道是怎么回事了。

为什么用r方便?
例子:
>>>print(“C:\Users\Destop\a\b\c\d")
#会出错
>>>print(“C:\\Users\\Destop\\a\\b\\c\\d")
#正常运行(每个\前都需要多输入一次\)
>>>print(r“C:\Users\Destop\a\b\c\d")
#正常运行(只需在前面输入一次r,自动完成后面加的\步骤)

为什么只用一次\会error?
为了区分\n 与 \t 等编码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-2 09:29:14 | 显示全部楼层
报错内容是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-2 09:46:54 | 显示全部楼层
首先`open`函数的定义如下
```python
def open(file, mode='r', ...):
    return file-object
```
可以看到
第一个参数: 文件路径, 必填值
第二个参数: 打开模式, 可以不填写, 默认为`r`, 注意`r`模式下, 不能使用write, 只能`w`/`a`模式才能使用write方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-3 00:28:39 | 显示全部楼层
笨鸟学飞 发表于 2021-3-1 00:36
前面加上‘r’, 是为了告诉编译器这个字符串不要转意 '\'
这么说你可能还不理解,直接上IDLE代码运行实例 ...

明白了.谢谢原来是通配字符的一个使用.谢谢了.我还说为什么不用\\呢.因为之前有看过鱼c的c语言教程,一直强调用\\
不然会出现错误.
解释型语言,还说很不错.至少不会搞得不知道哪里的代码出问题了
我用的版本是3.9
确认了和版本无关,主要是他这个有文件,用了路径.我是没有用路径,直接目录创建的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-20 06:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表