Crossin的编程教室

标题: 【Python 第32课】 写文件 [打印本页]

作者: crossin先生    时间: 2014-4-24 18:36
标题: 【Python 第32课】 写文件
来而不往,非礼也。有读,就要有写。

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

打开文件我们昨天已经讲过。但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.从控制台输入一些内容,保存至一个文件。


作者: QQ_172436    时间: 2014-6-13 22:34
op = open('list.py')
li = op.readlines()
f = file('test.py','w')
for i in li:
    f.write(i)
作者: xiaohuzai    时间: 2015-3-4 20:16
第一题:
  1. f=file('data.txt')
  2. data=f.read()
  3. e=file('output.txt','w')
  4. e.write(data)
  5. e.close()
复制代码

作者: xiaohuzai    时间: 2015-3-4 20:19
第二题:
  1. f=raw_input()
  2. e=file('output.txt','w')
  3. e.write(f)
  4. e.close()
复制代码

作者: zzxomg    时间: 2015-3-14 15:42
  1. #coding:utf-8
  2. #文件操作
  3. f = file('data.txt')
  4. #con = f.read()
  5. #con = f.readline()
  6. con = f.readlines()
  7. for i in con :
  8.                 print i,
  9. f.close()
  10. f2 = open('data2.txt','w')
  11. f2.writelines(con)
  12. f2.close()
复制代码

作者: cross    时间: 2015-4-24 10:08
xiaohuzai 发表于 2015-3-4 20:16
第一题:

f.close()
作者: lovia    时间: 2015-5-28 00:33
  1. f1=file('data.txt')
  2. data1=f1.read()
  3. print data1
  4. f1.close()
  5. f2=file('rongqi.txt','w')
  6. f2.write('20150528\n')
  7. f2.write(data1)
  8. data2=f2.read()
  9. f2.close()
复制代码

作者: 周末晒被子    时间: 2015-12-7 14:39
楼上标有代码行数的是什么软件?太好用了,windows能用吗?
作者: 周末晒被子    时间: 2015-12-7 15:18
本帖最后由 周末晒被子 于 2015-12-7 15:23 编辑

Crossin先生,我发现用IDLE,在控制台(非new window的文本编辑器)对 data.txt 进行修改不会真的影响到 data.txt 。

在控制台,我想通过创建一个新的txt文本,“newdata.txt”,并写入一些东西:

>>>f=open('newdata.txt','w')
>>>stuff='12345'
>>>f.write(stuff)
>>>f.close()

这样并不会在文件目录生成一个新的 newdata.txt。

又比如在控制台对一个已经存在的文件 wenjian.txt ,想把一些东西覆盖或者添加上去:

>>>f=open('wenjian.txt','w')
>>>stuff='12345'
>>>f.write(stuff)
>>>f.close()

我再回去打开 wenjian.txt 完全没有变化。进行appending操作也是一样,f=open('wenjian.txt','a')。
作者: crossin先生    时间: 2015-12-7 21:41
周末晒被子 发表于 2015-12-7 15:18
Crossin先生,我发现用IDLE,在控制台(非new window的文本编辑器)对 data.txt 进行修改不会真的影响到 da ...

idle的目录不是你当前目录,你用绝对路径
作者: 460883323    时间: 2015-12-9 12:57
#题1
f = file("data.txt")
a1=f.read()
out2=open("output2.txt","w")
out2.write(a1)
out2.close()

#题2
f=raw_input()
out=open("output3.txt","w")
out.write(f)
out.close()

好开心第一次能写出点东西
作者: Kunz    时间: 2015-12-19 14:54
1.
f=open('data.txt')
data=f.read()
print(data)
out=open('output.txt', 'w')
out.write(data)
f.close()
out.close()

作者: Kunz    时间: 2015-12-19 14:59
2.
data=input()
out=open('output.txt','w')
out.write(data)
out.close()
作者: catherinemic    时间: 2016-1-2 17:10
第一题
  1. f=file('data.txt')
  2. data=f.read()
  3. out=open('output.txt','a')
  4. out.write(data)
  5. f.close
  6. out.close
复制代码

作者: catherinemic    时间: 2016-1-2 17:20
第二题
  1. data=raw_input()
  2. eg=file('excercise.txt','w')
  3. eg.write(data)
  4. eg.close()
复制代码

作者: 对不起我是保镖    时间: 2016-4-7 17:04
总是提示 IOError: File not open for reading,求解
QQ截图20160407170329.png
作者: crossin先生    时间: 2016-4-7 17:32
对不起我是保镖 发表于 2016-4-7 17:04
总是提示 IOError: File not open for reading,求解

w是写入模式
作者: 追风    时间: 2016-5-5 15:39
Crossin老师,新写的文件必须关闭之后,再打开才能print吗?有没有其他快捷的方式呢?
1.png

作者: 追风    时间: 2016-5-5 15:49
7.png

作者: FPOS    时间: 2016-5-31 11:41
本帖最后由 FPOS 于 2016-5-31 11:51 编辑
  1. f=file('text1.txt')
  2. date=f.read()
  3. print 'copy over'
  4. f.close()
  5. print 'closed text1'
  6. e=file('text2.txt','w')
  7. e.write(date)
  8. print 'writed in text2'
  9. e.close()
  10. print 'closed text2\n请检查文件'
复制代码
月底终于忙完了,其实还是懒。
  1. f1=raw_input()
  2. f2=file('text2.txt','w')
  3. f2.write(f1)
  4. f2.close()
复制代码

作者: qizhounk    时间: 2016-8-16 02:17
Hi,
请问为什么我的程序报错呢?
谢谢!

1.png (60.07 KB, 下载次数: 237)

1.png


作者: qizhounk    时间: 2016-8-16 02:21
qizhounk 发表于 2016-8-16 02:17
Hi,
请问为什么我的程序报错呢?
谢谢!

最后一行的f.close后面加上了(), 也还是一样的报错
作者: crossin先生    时间: 2016-8-16 15:06
qizhounk 发表于 2016-8-16 02:21
最后一行的f.close后面加上了(), 也还是一样的报错

你的路径里有字符被转义了
路径里面用双斜杠\\,或者在前面加上 r,如r"c:\Users\...."

作者: qizhounk    时间: 2016-8-17 08:29
crossin先生 发表于 2016-8-16 15:06
你的路径里有字符被转义了
路径里面用双斜杠\\,或者在前面加上 r,如r"c:%users\...."
...

哇,真的可以,谢谢啦!
作者: l0ve1o24    时间: 2016-12-10 15:08
f=raw_input()
e=file('output.txt','w')
e.write(f)
e.close()


老师,像第二题在控制台输入内容,如何换行
作者: crossin先生    时间: 2016-12-10 18:56
l0ve1o24 发表于 2016-12-10 15:08
f=raw_input()
e=file('output.txt','w')
e.write(f)

如果是input,可以用三引号的方式
如果是 raw_input ,用 \r\n 表示换行
作者: blueheart    时间: 2017-8-25 07:53
第一题:
  1. f = file('data.txt')
  2. data = f.read()
  3. print data
  4. f.close()

  5. #f1 = file('target.txt')  python默认是以只读模式打开文件。如果想要写入内容,在打开文件的时候需要指定打开模式为写入
  6. f1 = file('target.txt','w')
  7. f1.write(data)
  8. #data1 = f1.read()
  9. #print data1
  10. f1.close()
  11. #print f1.read()

  12. f2 = file('target.txt')
  13. data1 = f2.read()
  14. print data1
复制代码
第二题:
  1. s = raw_input()

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

  3. f.write(s)

  4. f.close()

  5. f1 = file('output.txt')

  6. data = f1.read()

  7. print data
复制代码

作者: Matthewguo    时间: 2017-9-28 03:04
第一题,感觉有思路,但是自己写的也能出来结果。
思路,打开已有文档读取内容,创建新文档并将已有的文档内容写入新文档,读取新文档。

f=open('test1.txt') #已经存在的test1文档
data1=f.read() #把test1中的内容赋值给data1
f.close()      #关闭test1

text=data1     #将data1(文档内容)赋值给新变量text
newtxt=open('new.txt','w') #写入一个新文档,名称为new
data2=newtxt.write(data1) #data2为新文档new的内容(空白),将text内容写入data2
newtxt.close()            #关闭

read1=open('new.txt')     #读取刚写入的文档new
out=read1.read()          #将new内容赋值给out
print(out)                #输入out内容
read1.close()             #关闭

ps.crossin老师,有没有比较好的命名规范吗?!比如变量什么的。
因为每次自己赋值,其实比较容易乱
作者: Matthewguo    时间: 2017-9-28 03:13
第二题。
f=input()
open1=open('second.txt','w')
input=open1.write(f)
open1.close()

open2=open('second.txt') #这部分可以省略,只为检查写入内容
data=open2.read()
print(data)
open2.close()
作者: crossin先生    时间: 2017-9-28 12:05
Matthewguo 发表于 2017-9-28 03:04
第一题,感觉有思路,但是自己写的也能出来结果。
思路,打开已有文档读取内容,创建新文档并将已有的文档 ...

命名没啥特别的。保证基本的命名规范,然后尽量用能够理解的英文单词最好,两个单词的话中间用下划线。
一般变量用名词,函数用动词。
主要目的是可读性,这个可以参考一些国外教材里的例子,它们做得比较好
作者: starleilei    时间: 2018-3-24 10:27
crossin先生 发表于 2016-12-10 18:56
如果是input,可以用三引号的方式
如果是 raw_input ,用 \r\n 表示换行

先生,这个具体是怎么输入的,可以举个例子吗,我py2试了好久,都没成功
作者: crossin先生    时间: 2018-3-24 14:36
starleilei 发表于 2018-3-24 10:27
先生,这个具体是怎么输入的,可以举个例子吗,我py2试了好久,都没成功 ...

a = 'hello \r\n world'
f.write(a)
作者: starleilei    时间: 2018-3-25 08:01
crossin先生 发表于 2018-3-24 14:36
a = 'hello \r\n world'
f.write(a)

先生,这个我试了用input是可以输入换行的,但是raw_input呢怎么做呢,还是没有研究出来,求解惑
作者: crossin先生    时间: 2018-3-25 22:48
starleilei 发表于 2018-3-25 08:01
先生,这个我试了用input是可以输入换行的,但是raw_input呢怎么做呢,还是没有研究出来,求解惑 ...

为什么一定要用 raw_input 输入多行呢……
非要用的话,你用 eval(raw_input()) ,效果和 input 一样
作者: starleilei    时间: 2018-3-26 07:11
crossin先生 发表于 2018-3-25 22:48
为什么一定要用 raw_input 输入多行呢……
非要用的话,你用 eval(raw_input()) ,效果和 input 一样 ...

谢谢先生解惑
作者: 司南    时间: 2018-4-9 18:52
  1. #homework.No.1
  2. #司南 2018.04.09
  3. #从文件中读取内容
  4. f_read=open('while.py').read()
  5. f_save=open('save.py','w')
  6. f_save.write(f_read)
  7. f_save.close()
  8. data=open('save.py').read()
  9. print(data)
复制代码

作者: 司南    时间: 2018-4-9 19:06
Crossin先生,我实在是不知道怎么办了,为啥这个代码一执行到,输入done,python就死机呢
  1. #homework.No.1
  2. #司南 2018.04.09
  3. #从控制台输入内容,保存至文件
  4. string=input('You can add any words to the document,Please begin,and end with "done"')
  5. while string!='done':
  6.     f_desk=open('desk.txt','a+')
  7.     f_desk.write(string+'\n')
  8.     f_desk.close()
  9.     string=input('You can add any words to the document,Please begin,and end with "done"')
  10. data=open('desk.txt').read()
  11. print(data)
  12. data.close()
复制代码

作者: crossin先生    时间: 2018-4-9 23:16
司南 发表于 2018-4-9 19:06
Crossin先生,我实在是不知道怎么办了,为啥这个代码一执行到,输入done,python就死机呢 ...

因为死循环了啊
程序里多增加一些print输出你就看出来了
作者: 司南    时间: 2018-4-10 15:12
crossin先生 发表于 2018-4-9 23:16
因为死循环了啊
程序里多增加一些print输出你就看出来了
  1. #homework.No.2
  2. #司南 2018.04.09
  3. #从控制台输入内容,保存至文件
  4. string=input('You can add any words to the document,Please begin,and end with "done"')
  5. while string!="done":
  6.     print(string)
  7.     f_desk=open('desk.txt','a+')
  8.     f_desk.write(string+'\n')
  9.     f_desk.close()
  10.     string=input('You can add any words to the document,Please begin,or end with "done"')
  11.     print(string)
  12. f=open('desk.txt')
  13. data1=f.read()
  14. print(data1)
  15. f.close()
复制代码
Crossin先生,这个加了print试了一下,每次print也是对的,但是一点输入done,python就是转圈圈,未响应,您知道为啥麽
作者: crossin先生    时间: 2018-4-10 15:52
司南 发表于 2018-4-10 15:12
Crossin先生,这个加了print试了一下,每次print也是对的,但是一点输入done,python就是转圈圈,未响应 ...

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

换个文件或者换个代码执行环境试试吧
作者: 司南    时间: 2018-4-10 15:54
crossin先生 发表于 2018-4-10 15:52
我这边执行你的代码没有问题

换个文件或者换个代码执行环境试试吧

多谢先生,已解决,更换文件名字就可以了
作者: startforever    时间: 2018-5-31 21:20
#第一题
f1=open(r'e:\test\11.txt','r',encoding='UTF-8')
f2=open(r'e:\test\22.txt','w',encoding='UTF-8')
f2.write(f1.read())
f1.close()
f2.close()

#第二题
a=input()
f3=open(r'e:\test\33.txt','a',encoding='UTF-8')
f3.write(a)
f3.close()




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5