Python
文件读写
文件的分类
文件分为文本文件和二进制文件。
文本文件: 文本文件基于字符编码,以字符的Unicode码值进行存储和编码。 文本文件可以存储大量的数据, 天气数据,交通数据,社会经济数据等。
二进制文件 基于值编码的文件,存储的是二进制数据
对文件的操作步骤
对文件的操作主要分为三步:
打开文件 => 读写文件 => 关闭文件
示例:
先创建一个文本文件:
存储路径和python文件存储路径相同。
python文件:
第一种读去文件方式:
with open('digits.txt') as file_object:
contents = file_object.read()
print(contents)
运行结果:
第二种打开文件的方式:
contents=open('digits.txt')
print(contents.read())
contents.close()
两种方法的区别:
第一种方法用with open打开,好处在于用关键字with在不需要访问文件后会自动将文件关闭。所以只用到了open()方法,而没有close()方法。 而如果用open() 和close() 来打开关闭文件,必须保证从open()到close()之间的代码都不会运行错误,一旦错误就可能导致文件无法关闭。而文件长期打开可能会导致数据丢失或者受损。并且如果过早的关闭文件,在后期需要继续调用文件时又得重新打开造成麻烦,所以用with open() 打开文件更好
用第一种方法打开文件,就把关闭文件的任务交给了python,让它自己在合适的时候关闭,开发只管使用就好。
文件路径
当你要打开的文件和你的python文件不在同一个文件夹中时,则需要用到相对路径 和 绝对路径。
相对路径
相对路径就是相对于python.py文件的文件路径。 注意是相对于.py文件,所以使用相对路径后python会从.py文件所在的目录,根据所给的文件路径去找到指定的文件
示例:
当文件是在.py文件夹的子文件中
文本文件text.txt的目录:
test.py文件目录
test.py中的代码
with open('txt/test.txt') as file_object:
contents=file_object.read()
print(contents)
运行结果:
注意点:
**写文件路径的时候,不能直接将文件夹中的路径复制过来,因为在windows 系统中,文件路径用的是反斜杠 \ **
而python是用斜杠来表示路径,否则会报错。
当要打开的文件在python文件的父文件中时:
with open('../testInFather.txt') as file_object:
contents=file_object.read()
print(contents)
with open('../../digits.txt') as file_object:
contents=file_object.read()
print(contents)
运行结果:
用 …/ 表示在相对当前文件的上一层中查找,有几层就用几个…/
文件目录如下:
绝对路径
就是写死的文件路径,从硬盘第一层开始往下找。
示例:
with open('E:/python文档/python/test/txt/test.txt') as file_object:
contents=file_object.read()
print(contents)
with open('E:/python文档/python/testInFather.txt') as file_object:
contents=file_object.read()
print(contents)
运行结果:
写这个路径很简单,只需要打开电脑中的文件目录,复制过来,再把反斜杠改成斜杠就行。
绝对路径利弊:
好处就是简单无脑,基本找到要打开的文件,复制路径就行。
弊处也很明显,而且很致命,就是不利于程序的移植。 这个路径在你的电脑可以打开,但是一旦把程序移到其他电脑,基本就不行了。 所以推荐使用相对路径。
文件的操纵
读文件 方法
方法 | 作用 |
---|---|
.read() | 读取整个文件到字符串中 例: test=handle.read() |
.read(n) | 从文件从读取n个字符到字符串中 例: test=handle.read(n) |
.readline() | 从文件读一行数据到字符串 |
.readlines() | 读取整个文件并创建列表 |
.seek() | 定位文件指针 |
示例:
with open('txt/test.txt','r') as file_object:
contents=file_object.read()
print(contents)
print('\n')
with open('txt/test.txt','r') as file_object:
contents=file_object.read(5)
print(contents)
print('\n')
with open('txt/test.txt','r') as file_object:
print(file_object.readline())
print('\n')
with open('txt/test.txt','r') as file_object:
print(file_object.readlines())
写文件 方法
方法 | 作用 |
---|---|
**.write() ** | 文本数据写入到文件 |
.writelines() | 字符串列表按行写入文件 |
示例代码:
with open('txt/test.txt','w') as file_object:
file_object.write("hello,")
file_object.write("everybody")
运行后打开文本文件:
这是以w写入文件的方式打开,写入数据会覆盖原有数据,如果想不让元数据被修改可以改成用a附加数据方式打开
文本文件的打开方式
模式 | 说明 |
---|---|
"r" | 以读取文件的方式打开文件 |
"w" | 以写入文件的方法打开文件 |
"a" | 以添加数据的方式打开文件 |
"r+" | 打开文件以读取和写入数据 |
"w+" | 打开文件以写入和读取数据 |
"a+" | 打开文件以添加和读取数据 |