likes
comments
collection
share

Python 读取和写入文本文件

作者站长头像
站长
· 阅读数 12

在日常开发中,最常执行的数据处理任务之一是从文件中读取数据,以某种方式对其进行操作,然后将结果数据写入新的数据文件以供以后用于其他目的。

我们为什么要读写文件?

打开和读入文件使我们能够处理较大的数据集,而在这种情况下,我们不可能输入每个值并将它们逐个存储为变量。编写文件可以让我们处理数据,然后将输出保存到文件中,以便日后查看。

现在,我们将练习处理一个包含多列数据的逗号分隔文本文件(.csv)。其他普通文本文件格式也类似。

为了打开文件,我们需要告诉 Python 文件的确切位置,即相对于 Python 当前工作的位置(工作目录)。我们可以将当前工作目录设置为文件所在的文件夹。或者,当我们提供文件名时,我们可以给出文件的完整路径。

  1. 新建一个文件

让我们打开并检查 demo.csv 文件的结构。如果用文本编辑器打开该文件,就会发现文件包含几行文本。

Python 读取和写入文本文件

不过,这个文件相当难读。如果在 Excel 或者 WPS 中打开该文件,就可以看到文件是按列组织的,每列之间用上图中的逗号隔开(因此文件扩展名为 .csv,代表逗号分隔值)。

Python 读取和写入文本文件

打开和读取文件分为三个步骤

我们将分三个步骤打开和读取文件。

  1. 我们将创建一个变量来保存要打开的文件名。
  2. 我们将调用 open 打开文件。
  3. 我们将调用一个函数来实际读取文件中的数据,并将其存储在一个变量中,以便处理。

然后,还有一步要做! 4. 完成后,我们要记得关闭文件!

你可以把这三个步骤想象成类似于从图书馆借书。首先,你必须进入目录或数据库,找到你需要的书(文件名)。然后,你必须从书架上取下这本书并打开它(打开功能)。最后,要从书中获得任何信息,您必须阅读书中的文字(阅读功能)!

下面是一个打开、阅读和关闭文件的示例。

# 创建文件名变量
filename = 'demo.csv' # 字符类型

# 打开文件
infile = open(filename, 'r') # r "表示我们正在打开要读取的文件,"infile"是我们要读取的已打开文件对象

# 将文件中的数据存储在变量中
data = infile.read()

# 打印文件中的数据
print(data)

# 关闭文件
infile.close()

将文件中的数据读入变量 data 后,我们就可以像处理代码中的其他变量一样处理它了。

  • open 函数也可以用来创建一个准备写入的新文件。打开文件进行写入和打开文件进行读取之间的唯一区别是使用 'w' 标志而不是 'r' 标志作为第二个参数。当我们打开一个文件进行写入时,会创建一个具有该名称的新的空文件并准备好接受我们的数据。如果现有文件具有相同的名称,则其内容将被覆盖。和以前一样,该函数返回对新文件对象的引用。

  • write 函数允许我们将数据添加到文本文件中。回想一下,文本文件包含字符序列。我们通常将这些字符序列视为文件中的行,其中每行以换行符 \n 字符结尾。请非常小心地注意到 write 方法采用一个参数,即一个字符串。调用时,字符串的字符将添加到文件末尾。这意味着如果需要,程序员的工作就是将换行符作为字符串的一部分包含在内。

读取文件的命令

有多种命令允许我们从文件中读入数据。

  • infile.read() 将以单个文本字符串的形式读入整个文件。
  • infile.readline() 一次读入一行(每次调用该命令,都会读入下一行)。
  • infile.readlines() 会将所有行读入一个列表,文件中的每一行都是列表中的一项。

混用这些命令可能会产生一些意想不到的结果。

# Create a variable for the file name
filename = 'demo.csv'

# Open the file
infile = open(filename, 'r') 

# Print the first two lines of the file
print(infile.readline())
print(infile.readline())

# call infile.read()
print(infile.read())

# close the file
infile.close()

请注意,infile.read() 命令是从文件的第三行开始的,也就是前两个 infile.readline() 命令离开的地方。

可以这样想:打开文件时,指针会放在文件左上角第一行的开头。每次调用读取函数时,光标或指针都会从原来的位置向前移动。

第一个 infile.readline() 从文件的开头开始,前进到第一行的末尾。现在,指针位于第二行的开头。

第二个 infile.readline() 将指针前进到文件第二行的末尾,并将指针停留在第三行的开头。

infile.read() 从这个位置开始,一直前进到文件的末尾。

一般来说,如果要在不同类型的读取命令之间切换,应该先关闭文件,然后再打开文件重新开始。

# Create a variable for the file name
filename = "demo.csv"

# Open the file
infile = open(filename, 'rb') 

lines = infile.readlines() 

for line in lines: # lines is a list with each item representing a line of the file
	print(str(line)) # print each line

infile.close() # close the file when you're done!

读取结果:

Python 读取和写入文本文件

写入文件的命令

通常,我们希望将数据写入一个新文件。如果我们进行了大量的计算或数据处理,并且希望能够保存数据并在稍后返回,那么这一点就特别有用。

就像读取文件一样,我们将分多个步骤打开和写入文件。

  1. 创建一个变量来保存我们要打开的文件的名称。通常,这将是一个尚不存在的新文件。
  2. 调用 Open 函数来打开文件。这次,我们将指定打开文件以写入!
  3. 将数据写入文件。这需要仔细注意格式。
  4. 当我们完成后,我们应该记得关闭文件!

下面的代码给出了写入文件的示例:

filename = "output.txt"

#w tells python we are opening the file to write into it
outfile = open(filename, 'w')

outfile.write("This is the first line of the file")
outfile.write("This is the second line of the file")

outfile.close() #Close the file when we’re done!

换行符:当您检查刚刚编写的文件时,您将看到所有文本都在同一行!这是因为我们必须使用特殊字符串字符 '\n' 告诉 Python 何时开始新行。这个换行符将告诉 Python 具体从哪里开始每一个新行。

假设我们被要求提供一个由 1 到 12 的所有平方数组成的文件。

首先,我们需要打开该文件。然后,我们将迭代数字 1 到 12,并对每个数字进行平方。这个新数字需要转换为字符串,然后才能写入文件。

for number in range(1, 13):
    square = number * number
    print(square)

当我们运行这个程序时,我们会在屏幕上看到输出行。一旦我们对它创建适当的输出感到满意,下一步就是添加必要的部分以生成输出文件并向其中写入数据行。

首先,我们需要使用 'w' 标志调用 open 函数 outfile = open("demo.txt",'w') 来打开一个新的输出文件。

我们可以选择任何我们喜欢的文件名。如果该文件不存在,则会创建该文件。但是,如果该文件确实存在,它将被重新初始化为空,并且您将丢失以前的所有内容。

创建文件后,我们只需调用 write 方法并传递我们希望添加到文件中的字符串即可。在本例中,字符串已被打印,因此我们只需将 print 更改为对 write 方法的调用。但是,还需要执行一个额外步骤,因为 write 方法只能接受字符串作为输入。我们需要将数字转换为字符串。然后,我们只需要在字符串中添加一个额外的字符即可。换行符需要连接到行尾。整行现在变成 outfile.write(str(square)+ '\n') 。 print 语句会在其输出的任何文本后自动输出换行符,但 write 方法不会自动执行此操作。完成后我们还需要关闭文件。

下面,我们将前 所有 个字符打印到输出窗口。

filename = "demo.txt"
outfile = open(filename, "w")

for number in range(1, 13):
    square = number * number
    outfile.write(str(square) + "\n")

outfile.close()

infile = open(filename, "r")

print(infile.read())

infile.close()

Python 读取和写入文本文件

同时,你也能在你的当前目录下面看到生成了一个 demo.txt 文件