20. python 从文件中读取数据

目录

1. python操作txt文件的步骤

2. 什么是文件的内存对象(文件句柄)?

a)read()  

b) 写文件  write()

3. 文件的读写的几种模式

3.1  r模式

3.2  r+ 模式:可读可写

3.3  w 模式只写,清空覆盖原文件

3.4  w+  模式 -可读可写

3.5 a模式

 3.6  a+模式

3. 文件路径



1. python操作txt文件的步骤

  • 获取被打开的文件的内存对象,该内存对象又叫做“文件句柄”。
  • 通过这个内存对象(文件句柄),来对文件进行操作(读取,写入等操作)。
  • 关闭文件

2. 什么是文件的内存对象(文件句柄)?

使用python读取一个txt文件的时候,相当于把这个文件从硬盘上,读取到了内存中。我们如果想要操作这个文件,是不是先要获取这个文件对象?只有获取这个文件对象后,才能够真正的去操作这个文件,不管是读取文件中的内容,还是向文件中写入内容。

这个“文件句柄”包含了文件的文件名、文件的字符集、文件的大小、文件在硬盘上的起始位置。

a)read()  

file = "..\data\pi_digits.txt"
file_object = open(file, mode='r')

#第一次read,返回结果是全部内容
file_object1 = file_object.read()
print("file_object-type:", type(file_object))  # 
print("file_object1-type:", type(file_object1))  # 
print("file_object1:", file_object1)

#第二次read,运行结果为空
file_object2 = file_object.read()
print("file_object2:", file_object2)

运行结果:

D:\PycharmProjects\Oasis_auto\zmytest
file_object-type: 
file_object1-type: 
file_object1: 3.1415926535
  8979323846
  2643383279
file_object2: 

Process finished with exit code 0

当我们操作这个“文件句柄”的read()方法去读取文件的时候,这个句柄会从文件的开头位置,移动到文件的结束位置。如果不做任何操作,读取完毕之后,句柄就会停止在结束这个位置。

因此当我们再次读取文件的时候,该句柄是从结束这个位置,往后面读取内容。

由于后面没有任何内容,因此第二次读取为空。file_object2读到的为空

b) 写文件  write()

# 写
file="..\data\my_write.txt"
file_w = open(file, mode="w")
file_w.write("first") #第一次运行写入的内容
#file_w.write("second") #第二次运行写入的内容
file_w.close()

20. python 从文件中读取数据_第1张图片

# 写
file="..\data\my_write.txt"
file_w = open(file, mode="w")
#file_w.write("first") #第一次运行写入的内容
file_w.write("second") #第二次运行写入的内容
file_w.close()

20. python 从文件中读取数据_第2张图片

当每次运行写入的内容变化时,就会覆盖之前的内容,文件中是最新一次写入的内容

3. 文件的读写的几种模式

20. python 从文件中读取数据_第3张图片


 

模式 可做操作 若文件不存在 是否覆盖 备注
r 只读 报错   读全文
r+ 可读可写 报错 1.先写后读的话,是从头开始覆盖式写(如只修改了前面的字符,后面字符是不会被删掉的),类指针停留在写完的末尾,不是文档末尾,
2.先读后写的话是在原有文本后添加,相当于追加, 因为读完后类指针不在文件开头,读到哪在哪开始写
w 只写 创建 open()时文件内原始数据会被全部清空,新写入的数据覆盖
w+ 可读可写 创建 只要执行open(file,w+),该文件内的内容就会被清空
a 只写 创建 追加写 在原文件内容上追加写
a+ 可读可写 创建 追加写 a+模式打开时是以追加的模式打开的,这时候光标定位在最后
如果直接读,读出的内容为空;直接写是在原文件内容上追加

r+:先读后写的话是在原有文本后添加, 因为读完后类指针已经在最末尾了,如果是先写后读的话,是从头开始覆盖式写(如只修改了前面的字符,后面字符是不会被删掉的),类指针停留在写完的末尾,不是文档末尾,可以读出未被覆盖写的部分;
w+:为先写后读,先写完后使用f.seek(0)回到初始位置然后开始读,如果先读的话是读不出任何东西的,因为w+也是纯粹的覆盖写,在未使用写操作前文档是完全空白的,无论之前该文件里有什么。so ,只能先写后读。
 

3.1  r模式

只读,读出全文

20. python 从文件中读取数据_第4张图片

3.2  r+ 模式:可读可写

1)先写后读 ,读到的内容是从写结束的位置开始,需要调整句柄位置

写是覆盖式写的

my_write.txt 起初是空文件

file="..\data\my_write.txt"
file_w = open(file, mode="r+")
file_w.write("123")
w2=file_w.read()
print(w2)

第一次运行,写入 “123”,此时print(w2) 运行结果为空,

20. python 从文件中读取数据_第5张图片

为空的原因:当你写入内容后,文件句柄会放在写入内容的最后面,因此当你立即读取的时候,句柄会从上次内容最后的位置,朝后面读,因此读取为空。

如果想写入后立马读出全部内容,需要调整句柄位置

#先写后读,需要调整句柄位置,才能读到全文
file_w.write("123")
file_w.seek(0)
w=file_w.read()
print("w:",w)

20. python 从文件中读取数据_第6张图片

my_write.txt 起初文件中的内容不为空,是:

ab
cdefg
#原文件有内容,先写后读
file_w.write("123")
w2=file_w.read()
print(w2)

运行后,my_write.txt:

123
cdefg

write(): 是从头开始覆盖式写(如只修改了前面的字符,后面字符是不会被删掉的),句柄停留在写完的末尾,不是文档末尾,可以读出未被覆盖写的部分;

20. python 从文件中读取数据_第7张图片

3.3  w 模式只写,清空覆盖原文件

读会报错:

20. python 从文件中读取数据_第8张图片

覆盖式写:文件内原始数据会被新写入的数据清空覆盖

20. python 从文件中读取数据_第9张图片

file="..\data\my_write.txt"
file_w = open(file, mode="w")
file_w.write("123")

运行后:

20. python 从文件中读取数据_第10张图片

3.4  w+  模式 -可读可写

只要执行open(file,w+),该文件内的内容就会被清空

20. python 从文件中读取数据_第11张图片

3.5 a模式

只写,在原文件内容上追加写

20. python 从文件中读取数据_第12张图片

 3.6  a+模式

打开时是以追加的模式打开的,这时候光标定位在最后

如果直接读,读出的内容为空:

20. python 从文件中读取数据_第13张图片

20. python 从文件中读取数据_第14张图片

a+模式下写入:

20. python 从文件中读取数据_第15张图片

3. 文件路径

将文件名传给open()函数时,python会在当前执行的文件的目录下查找该文件,即file_read.py所在目录--zmytest目录下查找 pi_digits.txt

20. python 从文件中读取数据_第16张图片

但是一般,会有专门存放文件的目录,不会和执行文件在同一个目录

当不在同一个目录下时,直接传递文件名就会报错。

20. python 从文件中读取数据_第17张图片

with open('..\data\pi_digits.txt') as file_object:
     contents=file_object.read()
     print("contents:",contents)

你可能感兴趣的:(python,pycharm,ide,python)