【问题标题】:Reading and Writing files in Python在 Python 中读取和写入文件
【发布时间】:2012-05-11 18:41:45
【问题描述】:

我正在编写一个有两个输入的脚本:

  1. 包含名称列表的文件,
  2. 不同的文件(可以为空或非空)

脚本的目的是从第一个文件中获取名称,访问某个 API 并获取每个名称的信息,然后将该信息写入第二个文件。如果第二个文件已经包含信息,则脚本读取写入文件的最后一行,在第一个文件中找到该条目,然后从该条目开始。但是,在读取和写入第二个文件时,我遇到了麻烦。

当我将第二个文件类型设置为“r+”然后在 file_two.read() 上进行打印时,它会显示第二个文件的内容。当我在下一行进行另一次打印时,它将文件显示为空。同样,当我将文件类型设置为“a+”时,两次都显示文件完全为空,即使我可以清楚地看到文本文件中的信息确实存在。有谁知道怎么回事?

这是处理写作的代码段:

def write_to_file(filename, users):
    pages = range(0, len(users) - 100, 100)
    for page in pages:
        user_names = get_users(users[page: page+100])
        lines = [format_user(user) for user in user_names]
        output_text = '\n'.join(lines)
        with filename as output_file:
            output_file.write(output_text.encode('utf-8'))

这是调用上述函数的代码段。

file_one = args.file1
file_two = args.file2
users = read_names_automatic(file_one)
write_to_file(file_two, users)

【问题讨论】:

  • with filename as output_file: 是错字吗?我想你的意思是with open(filename, 'a+') as output_file:
  • 该文件之前已经在脚本中使用 argparse 打开过,此代码只是将所有信息写入文件,然后在完成后关闭文件。

标签: python file file-io


【解决方案1】:

当我将第二个文件类型设置为“r+”,然后在 file_two.read() 上进行打印时,它会显示第二个文件的内容。当我在下一行再次打印时,它显示文件为空。

是的,这是预期的行为。文件指针指向file_two.read() 末尾的文件末尾,因此任何进一步读取的尝试都会返回一个空字符串。例如,检查以下内容:

with open("test.txt") as f:
    print f.readline() # => prints the first line, sets file pointer to second line
    print f.read() # => prints everything from the second line on

将文件指针重置到文件的开头:

with open("test.txt") as f:
    print f.read() # => prints entire file, sets file pointer to end of file
    f.seek(0) # => reset file pointer to beginning of file
    print f.read() # => prints entire file

同样,当我将文件类型设置为“a+”时,两次都显示文件完全为空,尽管我可以清楚地看到文本文件中的信息确实存在。

当您open("test.txt", "a+") 时,文件指针设置为文件末尾,因此任何读取尝试都会产生一个空字符串。事实上,这就是允许您追加到文件的原因。如果你先file_two.seek(0)file_two.write(),写出来的文字会加到file_two的开头。

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 2022-01-23
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多