用Python读写文件

时间:2012-05-11 18:41:46

标签: python file file-io

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

  1. 包含名称列表的文件
  2. 一个不同的文件(可以是空的或非空的)
  3. 该脚本的目的是从第一个文件中获取名称,访问某个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)
    

1 个答案:

答案 0 :(得分:3)

  

当我将第二个文件类型设置为“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的开头。