python学习记录6-文件I/O
文件I/O
读取键盘输入(raw_input/input)
1.raw_input([prompt]) #函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符)
2.input([prompt]) #和raw_input类似,当时input可以接收python表达式作为输入
>>>a = eval(input("输入一个数:")) >>>print("输出结果为:", a) 输入一个数:[x for x in range(2,10,5)] 输出结果为: [2, 7]
open函数
python内置的open()函数可以打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。语法如下:
file object = open(file_name [, access_mode][, buffering])
各个参数的细节如下:
- file_name:file_name变量是一个包含了要访问的文件名称的字符串值。
- access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
- buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
不同模式打开文件的完全列表:
| 模式 | 含义 |
| t | 文本模式 (默认)。 |
| x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
| b | 二进制模式。 |
| + | 打开一个文件进行更新(可读可写)。 |
| U | 通用换行模式(不推荐)。 |
| r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
| rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
| r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
| rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
| w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
| wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
| w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
| wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
| a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
| ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
| a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
| ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
模式总结:
| 模式 | r | r+ | w | w+ | a | a+ |
| 读 | * | * | * | * | ||
| 写 | * | * | * | * | * | |
| 创建 | * | * | * | * | ||
| 覆盖 | * | * | ||||
| 指针在开始 | * | * | * | * | ||
| 指针在结尾 | * | * |
file对象的属性
一个文件被打开后,该文件含有各种信息:
| 属性 | 含义 |
| file.closed | 返回true如果文件已被关闭,否则返回false。 |
| file.mode | 返回被打开文件的访问模式。 |
| file.name | 返回文件的名称。 |
|
file.softspace (python3已移除) |
如果用print输出后,必须跟一个空格符,则返回false。否则返回true。 |
>>>file1 = open("foo.txt", "w") >>>print(file1.name) >>>print(file1.closed) >>>print(file1.mode) >>>file1.close() >>>print(file1.closed) foo.txt False w True
文件对象的方法
| 方法 | 含义 | |
| file.close() | 关闭文件。关闭后文件不能再进行读写操作 | |
| file.flush() | 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入 | |
| file.fileno() | 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。 | |
| file.isatty() | 如果文件连接到一个终端设备返回 True,否则返回 False。 | |
| file.next() | 返回文件下一行。 | |
| file.read([size]) | 从文件读取指定的字节数,如果未给定或为负则读取所有。 | |
| file.readline([size]) | 读取整行,包括 "\n" 字符。 | |
| file.readlines([sizeint]) | 读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。 | |
|
设置文件当前位置,注一个中文2个字节 | |
| file.tell() | 返回文件当前位置。 | |
| file.truncate([size]) | 截取文件,截取的字节通过size指定,默认为当前文件位置。 | |
| file.write(str) | 将字符串写入文件,返回的是写入的字符长度。 | |
|
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
close函数
File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。用 close()方法关闭文件是一个很好的习惯。
write()和read()函数
write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。write()方法不会在字符串的结尾添加换行符('\n')。
read()方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
>>>file1 = open("foo.txt", "r+") >>>print(file1.name) >>>print(file1.closed) >>>print(file1.mode) >>>file1.write("hello world") >>>t = file1.read(100) >>>print(t) foo.txt False r+ hello world
os模块还提供了各种方法
| 方法 | 含义 |
| os.mkdir() | 当前目录下创建新的目录们 |
| os.chdir() | 改变当前的目录 |
| os.getcwd() | 显示当前的工作目录。 |
| os.rmdir() | 删除目录 |
pickle模块
- python的pickle模块实现了基本的数据序列和反序列化。
- 通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。
- 通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
import pickle my_list = [1, 2, "3", ["hello world"], {1:"hello"}] pickle_file = open("mylist.pkl", "wb") pickle.dump(my_list, pickle_file)#保存信息 pickle_file.close() pickle_file = open("mylist.pkl", "rb") my_list2 = pickle.load(pickle_file)#读取信息 print(my_list2)
with语句
with语句可以自动管理上下文的资源,不论什么原因跳出with块,都能确保正确的关闭,以此来达到释放资源的目的。
with open("a.txt", "r") as file1: print(file1.read())
with open("a.txt", "r") as file1: with open("b.txt", "w") as file2: file2.write(file1.read())#快速复制

浙公网安备 33010602011771号