设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Python 第32课】 写文件

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
楼主
发表于 2014-4-24 18:36:38 |显示全部楼层 |倒序浏览
来而不往,非礼也。有读,就要有写。

和把大象关进冰箱一样,写文件也需要三步:
打开文件;
把内容写入文件;
关闭文件。

打开文件我们昨天已经讲过。但python默认是以只读模式打开文件。如果想要写入内容,在打开文件的时候需要指定打开模式为写入:

f = file('output.txt', 'w')

'w'就是writing,以这种模式打开文件,原来文件中的内容会被你新写入的内容覆盖掉,如果文件不存在,会自动创建文件。
不加参数时,file为你默认为'r',reading,只读模式,文件必须存在,否则引发异常。
另外还有一种模式是'a',appending。它也是一种写入模式,但你写入的内容不会覆盖之前的内容,而是添加到文件中。

打开文件还有一种方法,就是open(),用法和file()是一致的。

写入内容的方法同样简单:

f.write('a string you want to write')

write的参数可以是一个字符串,或者一个字符串变量。

示例程序:

data = 'I will be in a file.\nSo cool!'
out = open('output.txt', 'w')
out.write(data)
out.close()

在你的程序保存目录下,打开output.txt就会看到结果。

留两道课后作业:
1.从一个文件中读出内容,保存至另一个文件。
2.从控制台输入一些内容,保存至一个文件。

#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2015-12-7 21:41:28 |显示全部楼层
周末晒被子 发表于 2015-12-7 15:18
Crossin先生,我发现用IDLE,在控制台(非new window的文本编辑器)对 data.txt 进行修改不会真的影响到 da ...

idle的目录不是你当前目录,你用绝对路径
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2016-4-7 17:32:31 |显示全部楼层
对不起我是保镖 发表于 2016-4-7 17:04
总是提示 IOError: File not open for reading,求解

w是写入模式
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2016-8-16 15:06:23 |显示全部楼层
qizhounk 发表于 2016-8-16 02:21
最后一行的f.close后面加上了(), 也还是一样的报错

你的路径里有字符被转义了
路径里面用双斜杠\\,或者在前面加上 r,如r"c:\Users\...."
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2016-12-10 18:56:42 |显示全部楼层
l0ve1o24 发表于 2016-12-10 15:08
f=raw_input()
e=file('output.txt','w')
e.write(f)

如果是input,可以用三引号的方式
如果是 raw_input ,用 \r\n 表示换行
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

6#
发表于 2017-9-28 12:05:34 |显示全部楼层
Matthewguo 发表于 2017-9-28 03:04
第一题,感觉有思路,但是自己写的也能出来结果。
思路,打开已有文档读取内容,创建新文档并将已有的文档 ...

命名没啥特别的。保证基本的命名规范,然后尽量用能够理解的英文单词最好,两个单词的话中间用下划线。
一般变量用名词,函数用动词。
主要目的是可读性,这个可以参考一些国外教材里的例子,它们做得比较好
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

7#
发表于 2018-3-24 14:36:54 |显示全部楼层
starleilei 发表于 2018-3-24 10:27
先生,这个具体是怎么输入的,可以举个例子吗,我py2试了好久,都没成功 ...

a = 'hello \r\n world'
f.write(a)
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

8#
发表于 2018-3-25 22:48:00 |显示全部楼层
starleilei 发表于 2018-3-25 08:01
先生,这个我试了用input是可以输入换行的,但是raw_input呢怎么做呢,还是没有研究出来,求解惑 ...

为什么一定要用 raw_input 输入多行呢……
非要用的话,你用 eval(raw_input()) ,效果和 input 一样
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

9#
发表于 2018-4-9 23:16:59 |显示全部楼层
司南 发表于 2018-4-9 19:06
Crossin先生,我实在是不知道怎么办了,为啥这个代码一执行到,输入done,python就死机呢 ...

因为死循环了啊
程序里多增加一些print输出你就看出来了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

10#
发表于 2018-4-10 15:52:26 |显示全部楼层
司南 发表于 2018-4-10 15:12
Crossin先生,这个加了print试了一下,每次print也是对的,但是一点输入done,python就是转圈圈,未响应 ...

我这边执行你的代码没有问题

换个文件或者换个代码执行环境试试吧
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-7 17:42 , Processed in 0.028719 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部