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

时间:2015-09-17 15:29:41

标签: 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(file_path,'r') as file:
    first = file.read()
    second = file.read()
    third = file.read()

是否会将内容读取到变量中,以便first1second2等?如果没有,我该怎么做?

3 个答案:

答案 0 :(得分:2)

第一个问题的答案是否定的。你正在写个别角色。你必须单独阅读它们。

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

如果您编写单个字符并且想要阅读单个字符,请将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()

lines = open(file_path).readlines()
first = lines[0]   # -> '1\n'
second = lines[1]  # -> '2\n'
third = lines[2]   # -> '3\n'

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

first = lines[0].strip()   # -> '1'

更好的是,您可以使用mapstrip()应用于每一行。

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

答案 1 :(得分:2)

问题1:否。

file.write简单地将您传递给它的任何内容写入文件中指针的位置。 file.write("Hello "); file.write("World!")将生成内容为"Hello World!"

的文件

您可以通过在每个要写入的字符串中附加换行符("\n")或使用print函数的file关键字参数(我找到)来编写整行要有点清洁)

with open(file_path, 'a') as f:
    print('1', file=f)
    print('2', file=f)
    print('3', file=f)

N.B。 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, 'r') as f:
    first, second, third = f.readlines()  # fails if there aren't exactly 3 lines

答案 2 :(得分:0)

将多行写入文件

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

with open(file_path,'a') as file:
    file.write('1')
    file.write('2')
    file.write('3')

该文件将包含以下内容:

123

它还将包含自打开追加以来之前的所有内容。要编写换行符,您必须明确添加这些换行符或使用writelines(),它需要一个可迭代的。

此外,我不建议使用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循环(如果使用Python 2.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循环返回的文件行(或者只是在读取它们时处理它们,特别是如果它是一个大文件)。