python文件操作实例,python文件操作步骤
运营是我们发展中不可或缺的要求。本文主要介绍一些关于Python的常见文件操作,通过示例代码介绍的非常详细,有需要的朋友可以参考一下。
00-1010从文件中读取数据。为什么要提供文件路径,逐行读取?创建一个包含文件每行内容的列表。使用文件的内容。具有数千或更多位的大文件。圆周率包含你的生日吗?编写文件并将其附加到文件中。
目录
1:读取整个文件。
首先,创建一个包含一些文本信息的文件。注意:如果文件是. py文件,可以不写路径进行操作。如果不是. py文件,则必须指明路径。
现在,我们创建一个名为text.py的python文件,并向他写入以下文本信息:
以下程序打开并读取该文件,然后在屏幕上显示其内容:
with( text . py )as python project 2: # open(要打开的文件的名称)
#open函数返回一个表示test.py文件的对象,python将该文件分配给pythonProject2。
cc=pythonProject2.read()
打印(抄送)
Python在当前执行的文件所在的目录中查找指定的文件。
关键字with在不再需要访问文件时关闭该程序中的文件。注意,我们调用open()而不是close()。也可以调用open()和close()来打开和关闭文件,但是在这样做的时候,如果程序中有bug导致close()方法无法执行,文件就不会被关闭。这可能看起来微不足道,但是没有正确关闭文件可能会导致数据丢失或损坏。如果在程序中过早调用close(),会在需要使用文件时发现文件被关闭(无法访问),从而导致更多的错误。在任何情况下都不容易确定关闭文件的正确时间,但通过使用前面显示的结构(将open(要打开的文件名)分配给另一个对象),Python可以确定:您只需打开文件并在需要时使用它,Python就会在正确的时间自动关闭它。
细心的学生已经注意到,在我们上面的输出中有一行额外的空格。原因是:read()到达文件末尾时,返回一个空字符串,显示这个空字符串就是一个空格。要删除空行,我们只需要使用之前学过的rstrip()函数。
从文件中读取数据
当一个简单的文件名如。txt传递给open()函数,Python会在当前执行的文件(即目标程序文件)所在的目录中查找。
根据您组织文件的方式,有时您可能希望打开不在程序文件所属目录中的文件。例如,您可以将程序文件存储在文件夹python_work中,并且在该文件夹中有一个名为text_files的文件夹来存储程序文件操作的文本文件。虽然文件夹text_files包含在文件夹Python_work中,但是只将位于前者的文件名传递给open()是不可行的,因为Python只在文件夹python_work中查找,而不在它的子文件夹text_files中查找。要让Python打开一个与程序文件不在同一个目录下的文件,需要提供一个文件路径,让Python到系统中的特定位置去找。
否则会出现如下图:python会告诉你找不到文件。
那么如何解决这个问题呢?
这里我们需要使用绝对路径,比如我们现在在桌面上创建一个. txt。
让我们使用相对路径(仅提供文件名)来打开:
用(r 新建文本文档。txt , r ,编码= utf-8 ),如f:
ff=f.read()
打印(ff)
我们发现文件根本打不开。
现在我们使用绝对路径(提供具体的位置信息),来打开:
用(r c : \ users \ Lenovo \ desktop \ new text document . txt , r ,encoding= utf-8 )作为f:
ff=f.read()
打印(ff)
文档的内容显示得很好。
-align:center">
注:encoding='utf-8的作用是为了避免出现乱码。
上图所示程序,不加encoding='utf-8,就会出现以下情况;
注:显示文件路径时,Windows系统使用反斜杠(\),而不是斜杠(/),但在代码中仍可以使用斜杠。
如果在文件路径中直接使用反斜杠,将引发错误,因为反斜杠用于对字符串中的字符进行转义。
举例:
C:\path\to\file.txt
其中的\t会被解读为制表符,如果一定要使用反斜杠,可对相对路径中的每个反斜杠都进行转义:
C:\\path\\to\\file.txt
逐行读取
读取文件时,常常需要检查其中的每一行:可能要在文件中查找特定的信息,或者要以某种方式修改文件中的文本。
直接使用for循环的方法:
在该目录下的文件读取:
for line in open("123.txt",encoding=utf-8):print(line)
计算机其他位置中的:
for line in open(r"C:\Users\Lenovo\Desktop\新建文本文档.txt",encoding=utf-8):print(line)
使用while循环
在该目录下的文件读取:
f=open("123.txt",encoding=utf-8)line=f.readline()
while line:
print(line)
line=f.readline()
f.close()
计算机其他位置中的:
f=open(r"C:\Users\Lenovo\Desktop\新建文本文档.txt",encoding=utf-8)line=f.readline()
while line:
print(line)
line=f.readline()
f.close()
使用with…as结构
在该目录下的文件读取:
with open("123.txt",encoding=utf-8) as f:for line in f:
print(line)
计算机其他位置中的:
with open(r"C:\Users\Lenovo\Desktop\新建文本文档.txt",encoding=utf-8) as f:for line in f:
print(line)
运行上面两个文件的结果:
hi,python
早上好
晚上好
你好
窗前明月光,疑似地上霜
举头望明月,低头思归乡
鹅鹅鹅,曲项向天歌
白毛浮绿水,红掌拨清波
我们不难发现,空白行变得更多了,原因是:在这个文件中,每行末尾都有一个看不见的换行符,而print函数在调用的时候也会产生一个换行符,因此每行末尾都会有两个换行符,一个来自文件,一个来自print函数的调用,要想消除这些换行符,可在调用print函数的时候,使用rstrip():
print(line.rstrip())
处理之后的结果:
窗前明月光,疑似地上霜
举头望明月,低头思归乡
鹅鹅鹅,曲项向天歌
白毛浮绿水,红掌拨清波
hi,python
早上好
晚上好
你好
创建一个包含文件各行内容的列表
使用关键字 with 时,open()返回的文件对象只在 with 代码块内可用。如果要在 with 代码块外访问文件的内容,可在 with 代码块内将文件的各行存储在一个列表中,并在 with 代码块外使用该列表:可以立即处理文件的各个部分,也可以推迟到程序后面再处理。
with open("123.txt",encoding=utf-8) as f:lines=f.readlines()#使用readlines()从文件中读取每一行,并将其存储在一个列表中
//这样处理后,在with代码块外仍然可以使用变量lines
for line in lines:
print(line)
输出结果:
hi,python
早上好
晚上好
你好
使用文件中的内容
举例:
with open("123.txt",encoding=utf-8) as f:lines=f.readlines()
pi=str()#创建空的字符串用于存储文本内容
for line in lines:
pi+=line.rstrip()#将每行末尾的空行去掉
print(pi)
print(len(pi))#输出字符串的长度
1234562345671038417968539
25
注:读取文本文件的时候,python会自动将所有的文本文件解读成字符串,如果文本文件中的内容为数值,并且要作为数值使用,就必须使用int()函数,或者float()函数将其进行转化。
举例:
如果上述例子中的123.txt中的内容要作为数值使用,则程序应进行修改:
如下:
with open("123.txt",encoding=utf-8) as f:lines=f.readlines()
pi=int()#进行强制转化
#pi=float()
for line in lines:
pi+=int(line)
#pi+=float(line)
print(pi)
1038418326562
包含千位以上的大型文件
前面我们所分析的都是包含几行的文本文件,现在假设我们有一个文件,其中包含精确到小数点后千位而不是30位的圆周率,也可创建一个字符串将他包含到里面,有的小伙伴想到这个问题会觉得很棘手,程序该怎么写呢?
其实,我们前面编撰好的程序就可以直接进行传递使用:
with open("123.txt",encoding=utf-8) as f:lines=f.readlines()
pi=str()#创建空的字符串用于存储文本内容
for line in lines:
pi+=line.rstrip()#将每行末尾的空行去掉
print(f"{pi[:52]}.....")#为了避免显示的内容不停的滚动,只打印前52位
print(len(pi))#输出字符串的长度
1234562345671038417968539168519635885951538287826636.....
1596
同理,对于万位,百万位等等更大的文件,我们的程序仍然可以使用。
圆周率中包含你的生日吗
with open("123.txt",encoding=utf-8) as f:lines=f.readlines()
pi=str()#创建空的字符串用于存储文本内容
for line in lines:
pi+=line.rstrip()#将每行末尾的空行去掉
you_birthday=str(input("请输入你的生日"))
if you_birthday in pi:
print("yes")
else:
print("NO")
请输入你的生日0904
yes
写入文件
1:写入空文件:
要将文本写入文件,你在调用open()时,需要提供另一个参数,告诉python,你要写入打开的文件.
举例:
with open("123.txt",w,encoding=utf-8) as f:f.write("晚上好")
打开该文件:
#open(名称,操作模式 )#操作模式包括:w:写,r:读取 ,a:附加,r+:读写`
如果省略了操作模式,python自动以只读的方式打开,如果要写入的文件不存在,python的open()函数将自动创建它,以写入的模式(w)打开,如果该文件已存在,则python会自动清空之前的内容。
python只能将字符串写入文本文件文件,要是想将数据存储到文本文件中,需要先用str()将其转化为字符串格式。
写入多行:
函数write()不会在写入的文本末尾添加换行符,因此如果写入多行时没有指定换行符,文件看起来可能不是我们想要的那样:
举例:
with open("123.txt",w,encoding=utf-8) as f:f.write("早上好---good morning")
f.write("中午好---good afternoon")
f.write("晚上好---good evening")
如下图所示,所有的内容都被显示在一行:
怎么解决这种问题呢?需要在方法调用write()中包含换行符:
with open("123.txt",w,encoding=utf-8) as f:f.write("早上好---good morning\n")
f.write("中午好---good afternoon\n")
f.write("晚上好---good evening\n")
现在文本内容呈现在不同行中:
像显示到终端一样,还可以使用空格,制表符和空行来设置这些输出的格式。
附加到文件
如果要给文件添加内容而不是覆盖原来的内容,可以以附加模式打开文件,以附加模式打开文件时,python不会在返回文件对象前清空文件的内容,而是将写入文件的行添加到文件末尾,如果指定的文件不存在,python会为你创建一个空文件。
举例:
with open("123.txt",a,encoding=utf-8) as f:#以附加模式打开f.write("hello,world")#将hello,world写入文件
原内容并没有被清空。
到此这篇关于Python常见文件操作的示例详解的文章就介绍到这了,更多相关Python文件操作内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。