鱼C论坛

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

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

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

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

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

x
大家好.我是买了鱼c的《零基础学python》自学python中的
就文件操作的章节中有一个疑问.不知道是python版本更新问题,还是因为书的内容问题.
先上代码吧
  1. >>>f=open(r"C:\Users/goodb\Destop\record.txt")
  2. >>>f.write("这是一段待写入的数据")
  3. 以上代码显示错误信息
  4. >>>f=open(r"C:\Users/goodb\Destop\record.txt","w")
  5. >>>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代码运行实例
  1. >>> print('\t\n\n\t123')
  2.        

  3.         123
  4. >>> print(r'\t\n\n\t123')
  5. \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代码运行实例
  1. >>> print('\t\n\n\t123')
  2.        

  3.         123
  4. >>> print(r'\t\n\n\t123')
  5. \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 编辑
  1. >>>print("C:\Users")
  2. #会出错
  3. >>>print("C:\\Users")
  4. #正常运行
  5. >>>print(r"C:\Users")
  6. #正常运行
复制代码


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

为什么用r方便?
例子:
  1. >>>print(“C:\Users\Destop\a\b\c\d")
  2. #会出错
  3. >>>print(“C:\\Users\\Destop\\a\\b\\c\\d")
  4. #正常运行(每个\前都需要多输入一次\)
  5. >>>print(r“C:\Users\Destop\a\b\c\d")
  6. #正常运行(只需在前面输入一次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-4-27 04:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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