跳转至

Python IO与文件编码

概要: Python使用input()函数和output()函数来实现程序和用户的交互。对于输入,我们还可以使用str类的各种方法,如我们可以使用rjust方法来获得一个右对齐到指定宽度的字符串,通过查看help(str)可以获取更多的细节。除此之外,本文还会讨论文件的创建、读取写入等操作。

创建时间: 2022.10.02 11:43:09

更新时间: 2022.10.02 11:46:19

用户输入内容

直接看如下示例

Python
def reverse(text):
    return text[::-1]  # 通过切片功能翻转文本

def is_palindrome(text):  # 判断是否为回文单词
    return text == reverse(text)

something = input("Enter text: ")
if is_palindrome(something):
    print("Yes, it is a palindrome")
else:
    print("No, it is not a palindrome")

运行结果如下

Text Only
PS E:\sublime text 3 files\python3> python io_input.py
Enter text: sir
No, it is not a palindrome

PS E:\sublime text 3 files\python3> python io_input.py
Enter text: madam
Yes, it is a palindrome

PS E:\sublime text 3 files\python3> python io_input.py
Enter text: racecar
Yes, it is a palindrome

提示

  1. 通过切片功能翻转文本,具体来说,可以通过使用seq[a:b]来从位置a开始到位置b结束来对序列进行切片,同样可以使用第三个参数来确定切片的步长(Step),默认步长是1,它会返回一份连续的文本,如果给定过一个负数的步长,如-1,那么将会返回翻转过的文本

  2. input()函数可以接受一个字符串作为参数,并将其展示给用户。当用户输入了某些内容并敲下回车键后,input()函数将返回用户输入的文本

文件

我们可以通过创建一个属于file类的对象并使用它的read readline write方法来打开或者使用文件,并对它们进行读取或者写入,当完成了文件后,可以调用close方法来告诉Python我们已经完成了对该文件的使用
示例程序块如下

Python
poem = '''\
Programing is fun
When the work is done 
if you wanna make your work also fun:
    use PYTHON!
'''

f = open('poem.txt', 'w') # 打开文件
f.write(poem) # 写入文件
f.close() # 关闭文件

f = open('poem.txt')
while True:
    line = f.readline()
    if len(line) == 0:
        break
        print(line, end='')
f.close()
直接用记事本打开文件poem.txt,结果如下

提示

  1. 我们使用内置的open函数来指定文件名以及打开模式

  2. 打开模式可以是文本模式阅读模式(r),写入模式(w),追加模式(a)。我们可以选择通过文本模式(t)或者二进制模式(b)进行读取、写入或追加文本

  3. help(open)提供更多细节参考

  4. 我们在循环中使用readline方法来读取文件的每一行,当一个空字符串返回时,表示我们已经到达文件末尾,并通过break来推出循环

Pickle存储文件

pickle标准模块可以将任何纯Python对象存储到一个文件中,并在稍后将其取回,这称为持久地(Persistently)存储对象
示例程序块如下

Python
import pickle

shoplistfile = 'shoplist.data'  # 存储的文件名

shoplist = ['apple', 'mango', 'carrot']  # 存储内容

f = open(shoplistfile, 'wb')  # 二进制写入

pickle.dump(shoplist, f)  # 封装
f.close()

del shoplist

f = open(shoplistfile, 'rb')  # 二进制读出

storedlist = pickle.load(f)  # 拆封
print(storedlist)
运行结果如下
Text Only
['apple', 'mango', 'carrot']

提示

  1. 若要将一个对象存储到一个文件中,首先需要通过open写入(write)二进制(binary)模式打开文件,然后调用pickle模块的dump函数来进行封装(Pickling)

  2. 我们可以通过pickle模块的load函数接收返回的对象,此过程称为拆封(Unpicking)

Unicode编码

当我们阅读或写入某一文件或当我们希望与互联网上的其它计算机通信时,我们需要将我们的Unicode字符串转换至一个能够被发送和接收的格式,这个格式叫作“UTF-8
示例程序块如下

Python
1
2
3
4
5
6
7
8
9
# encoding=utf-8
import io

f = io.open("abc.txt", "wt", encoding="utf-8")
f.write(u"Imagine non-English language here")
f.close()

text = io.open("abc.txt", encoding="utf-8").read()
print(text)

提示

  1. 当我们使用Unicode编写一款程序时,必须确保Python程序已经被告知我们使用的是UTF-8,因此我们必须将# encoding=utf-8这一注释放置在我们程序的顶端

  2. 我们使用io.open并提供了“编码(Encoding)”和“解码(Decoding)”参数来告诉Python正在使用Unicode