Python中文件的简单读取、写入方法
作者:爱吃肉的小花生
首先声明:写这些只是方便做着自己记忆和理解,如果能帮助到大家那当然更好不过
一、从文件中读取数据
(1)读取全部数据
我们先创建一个文本文件python_learning.txt,我们尝试着用python将其读取。我们先写一个正确的示范:
file_path = 'C:Users\Peanut Uncle\Desktop\python_learning.txt'
with open(file_path) as fap:
contents = fap.read()
print(contents)
In python you can 为所欲为
In python you can 大开杀戒
In python you can 纵享丝滑
In python you can 哈撒给i
In python you can 哈里克i同
输出结果如上所示,在这里有几个问题要讲一下,也是我自己一开始犯的错误:
1. C:\Users\Peanut Uncle\Desktop 文件的属性里文件位置是这样的,但是如果这样直接输入,我们运行时会报错,我们应该把Users前面的“\”删掉或者换成“/”都可以。
2. 我们用了with open()as 别名:但其实我们可以不用with的,使用with是因为我们只在这一块读取数据,如果我们忘记关掉,并不会影响我们的数据,否则可能会是数据损失
3. as 别名:是因为python中,file_path只是一个字符串,并没有储存数据,只是方便python去在文件中找到他,我们给他一个别名,方便我们去将文件中的数据储存到变量中。
下面我把错误的示例展现给大家:
file_path = 'C:\Users\Peanut Uncle\Desktop\python_learning.txt'
with open(file_path) as fap:
contents = fap.read()
print(contents)
'''输出的结果是:
File "D:/PycharmProjects/data/Ch10文件与异常/wordcloud.py", line 1
file_path = 'C:\Users\Peanut Uncle\Desktop\python_learning.txt'
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape'''
显然python报错了,这就是我们多加了一个’'导致的,我们平时可以多加尝试,出现错误并不是什么坏事,反而会加深大家对其的理解,下面我们展示一下如果不给其别名会有什么结果:
file_path = 'C:Users\Peanut Uncle\Desktop\python_learning.txt'
with open(file_path) :
contents = file_path.read()
print(contents)
结果也是给我们报错了:
''AttributeError: 'str' object has no attribute 'read''
(2)逐行读取
例如我们的文本,需要按行读取,一行一行地检查,这时我们就可以类似之前的遍历来做,我们读取pi.txt文件,里面是圆周率的几位数
file_path = 'C:Users\Peanut Uncle\Desktop\pi.txt'
with open(file_path) as pi :
for line in pi:
print(line)
我们发现这时我们并不需要什么read函数来帮忙,直接遍历文件就可以了。但注意我们打印时,每一行后都加了换行符,为了与原文件保持一致,我们做了一些改进。我们用之前说过的stirp来优化一下:
file_path = 'C:Users\Peanut Uncle\Desktop\pi.txt'
with open(file_path) as pi :
for line in pi:
print(line.strip())
##lstrip() 删前空格
##rstrip()删后空格
##strip()删所有空格 我们根据特殊情况特殊对待
(3)将文件中的每一行内容存在一个列表中,我们用到readlines()
file_path = 'C:Users\Peanut Uncle\Desktop\pi.txt'
with open(file_path) as pi :
contents = pi.readlines()
print(contents)
for line in contents:
line = line.strip()
'这里我们需要注意strip只能删字符元素的空格'
' 不能直接删列表中的\n''
print(line)
上面我们先将pi文件中的每一行都放到列表中,然后我们遍历该列表,并将每一行打印,这里要注意,默认是有\n换行的,所以我们打印时用了strip()。
(4)使用文件的内容
很多时候我们需要使用文件中的数据或内容,比如我们需要将pi文件中的圆周率用作计算时,我们将文件打开,并将其的值调用
file_path = 'C:Users\Peanut Uncle\Desktop\pi.txt'
with open(file_path) as pi :
pi1 = ''
for line in pi :
pi1 = pi1+line.strip()'因为默认有\n,所以想直接工厂函数会报错'
contents = float(pi1)
square = contents**2
print(square)
二、写入文件
有时我们也需要将内容写到文件中,有去当然也有舍嘛,我们用write()
file_name = 'C:Users\Peanut Uncle\Desktop\写入文件.txt'
'''如果我们之前有这个文件,那我们写入时会清空文件再写入
所以我们在写入的时候,要慎重,小心不要把原本的内容清空了'''
with open(file_name,'w') as write_file:
message = write_file.write('我喜欢你,那绝对是当然的!')
'''如果我们之前没有这个文件,会自动创建该文件'''
'''这是我们不会打印出来,而会把内容写到该文件中'''
我们看到open后面的参数:
1. 'w’代表写入
2. 'r’代表只读取,我们默认为只读
3. 'a’代表附加,我们在后面直接写入,并不会清空
那我们拿个例题试一下:我们询问用户为什么喜欢python?并把原因放到一个文件中。
file_name = 'C:Users\Peanut Uncle\Desktop\guests.txt'
with open(file_name,'w') as guests :
while True:
reason = input('Why are you like python :')
if reason == '没了':
break
else:
guests.write(reason+'\n')
我们要跳出循环才可以写到文件中,否则是空白的,要出现:Process finished with exit code 0即可。
这就是简单的文件读取与写入,更深层次的我们可以去查阅python自带Idle中help里的详情。