Python 将行追加到文件,然后读取它们

Python 将行追加到文件,然后读取它们,python,Python,我想在一个文件中追加或写入多行。我相信下面的代码附加了一行: with open(file_path,'a') as file: file.write('1') 我的第一个问题是,如果我这样做: with open(file_path,'a') as file: file.write('1') file.write('2') file.write('3') 它会创建一个包含以下内容的文件吗 1 2 3 第二个问题,如果我以后这样做: with open(

我想在一个文件中追加或写入多行。我相信下面的代码附加了一行:

with open(file_path,'a') as file:
    file.write('1')
我的第一个问题是,如果我这样做:

with open(file_path,'a') as file:
    file.write('1')
    file.write('2')
    file.write('3')
它会创建一个包含以下内容的文件吗

1
2
3  
第二个问题,如果我以后这样做:

with open(file_path,'r') as file:
    first = file.read()
    second = file.read()
    third = file.read()

将内容读取到变量中,以便
第一个
将是
1
第二个
将是
2
等?如果没有,我该怎么做?

第一个问题的答案是否定的。你写的是单个字符。你必须把它们单独读出来

另外,请注意
file.read()
返回文件的完整内容

with open(file_path, 'w') as out_file:
  out_file.write('1\n')
  out_file.write('2\n')
  out_file.write('3\n')
如果您编写了单个字符,并且希望读取单个字符,请将
file.read()
的结果作为字符串处理

text = open(file_path).read()
first = text[0]
second = text[1]
third = text[2]
至于第二个问题,您应该写换行符,
'\n'
,以终止写入文件的每一行

with open(file_path, 'w') as out_file:
  out_file.write('1\n')
  out_file.write('2\n')
  out_file.write('3\n')
要读取这些行,可以使用
file.readlines()

如果要删除每行末尾的换行符,请使用
strip()
,它将丢弃字符串前后的所有空格。例如:

first = lines[0].strip()   # -> '1'
更好的是,您可以使用
map
strip()
应用于每一行

lines = list(map(str.strip, open(file_path).readlines()))
first = lines[0]   # -> '1'
second = lines[1]  # -> '2'
third = lines[2]   # -> '3'

第一个问题的答案是否定的。你写的是单个字符。你必须把它们单独读出来

另外,请注意
file.read()
返回文件的完整内容

with open(file_path, 'w') as out_file:
  out_file.write('1\n')
  out_file.write('2\n')
  out_file.write('3\n')
如果您编写了单个字符,并且希望读取单个字符,请将
file.read()
的结果作为字符串处理

text = open(file_path).read()
first = text[0]
second = text[1]
third = text[2]
至于第二个问题,您应该写换行符,
'\n'
,以终止写入文件的每一行

with open(file_path, 'w') as out_file:
  out_file.write('1\n')
  out_file.write('2\n')
  out_file.write('3\n')
要读取这些行,可以使用
file.readlines()

如果要删除每行末尾的换行符,请使用
strip()
,它将丢弃字符串前后的所有空格。例如:

first = lines[0].strip()   # -> '1'
更好的是,您可以使用
map
strip()
应用于每一行

lines = list(map(str.strip, open(file_path).readlines()))
first = lines[0]   # -> '1'
second = lines[1]  # -> '2'
third = lines[2]   # -> '3'
问题1:没有。
file.write
simple将传递给它的内容写入文件中指针的位置
file.write(“Hello”);write(“World!”)
将生成一个包含内容为“Hello World!”

您可以通过在每个要写入的字符串中添加换行符(
“\n”
)或使用
print
函数的
file
关键字参数(我发现它更简洁)来写入整行代码

注意:
print
到文件并不总是添加换行符,但默认情况下,
print
本身会添加换行符
print('1',file=f,end='')
f.write('1')

问题2:没有。
file.read()
读取整个文件,而不是一次读取一行。在这种情况下,你会得到

first == "1\n2\n3"
second == ""
third == ""
这是因为在第一次调用
file.read()
之后,指针被设置为文件的末尾。后续调用尝试从指向文件结尾的指针读取。因为它们在同一个位置,所以会得到一个空字符串。更好的方法是:

with open(file_path, 'r') as f:  # `file` is a bad variable name since it shadows the class
    lines = f.readlines()
    first = lines[0]
    second = lines[1]
    third = lines[2]
或:

问题1:没有。
file.write
simple将传递给它的内容写入文件中指针的位置
file.write(“Hello”);write(“World!”)
将生成一个包含内容为“Hello World!”

您可以通过在每个要写入的字符串中添加换行符(
“\n”
)或使用
print
函数的
file
关键字参数(我发现它更简洁)来写入整行代码

注意:
print
到文件并不总是添加换行符,但默认情况下,
print
本身会添加换行符
print('1',file=f,end='')
f.write('1')

问题2:没有。
file.read()
读取整个文件,而不是一次读取一行。在这种情况下,你会得到

first == "1\n2\n3"
second == ""
third == ""
这是因为在第一次调用
file.read()
之后,指针被设置为文件的末尾。后续调用尝试从指向文件结尾的指针读取。因为它们在同一个位置,所以会得到一个空字符串。更好的方法是:

with open(file_path, 'r') as f:  # `file` is a bad variable name since it shadows the class
    lines = f.readlines()
    first = lines[0]
    second = lines[1]
    third = lines[2]
或:


将多行写入文件

这将取决于数据的存储方式。对于编写单个值,您当前的示例是:

with open(file_path,'a') as file:
    file.write('1')
    file.write('2')
    file.write('3')
该文件将包含以下内容:

123
它还将包含自打开以进行追加后以前包含的任何内容。要编写换行符,必须显式添加这些换行符或使用
writelines()
,这需要一个iterable

另外,我不建议使用
file
作为对象名,因为它是一个关键字,所以从现在起我将使用
f

例如,下面是一个示例,其中有一个使用
write()
和显式换行符编写的值列表:

my_values = ['1', '2', '3']

with open(file_path,'a') as f:
    for value in my_values:
        f.write(value + '\n')
但更好的方法是使用
writelines()
。要添加换行符,可以使用列表将它们连接起来:

my_values = ['1', '2', '3']

with open(file_path,'a') as f:
    f.writelines([value + '\n' for value in my_values])
如果要打印一系列数字,可以使用带有
range
的for循环(如果使用Python2.x并打印大量数字,则可以使用
xrange

从文件中读取单个行

要从文件中读取各行,还可以使用for循环:

my_list = []

with open(file_path,'r') as f:
    for line in f:
        my_list.append(line.strip())  # strip out newline characters

通过这种方式,您可以迭代使用for循环返回的文件的行(或者在读取这些行时对其进行处理,特别是如果它是一个大文件)。

将多行写入一个文件

这将取决于数据的存储方式。对于编写单个值,您当前的示例是:

with open(file_path,'a') as file:
    file.write('1')
    file.write('2')
    file.write('3')
该文件将包含以下内容:

123
它还将包含自打开以进行追加后以前包含的任何内容。要编写换行符,必须显式添加