用Python读写文件

用Python读写文件,python,file,file-io,Python,File,File Io,我正在编写一个包含两个输入的脚本: 包含名称列表的文件 其他文件(可以为空或非空) 脚本的目的是从第一个文件中获取名称,访问某个API并获取每个名称的信息,然后将该信息写入第二个文件。如果第二个文件已经包含信息,脚本将读取写入文件的最后一行,在第一个文件中找到该条目,然后从该条目开始。然而,在读写第二个文件时,我遇到了麻烦 当我将第二个文件类型设置为“r+”然后对文件_two.read()进行打印时,它会显示第二个文件的内容。当我在下一行再次打印时,文件显示为空。同样,当我将文件类型设置为“a+

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

  • 包含名称列表的文件
  • 其他文件(可以为空或非空)
  • 脚本的目的是从第一个文件中获取名称,访问某个API并获取每个名称的信息,然后将该信息写入第二个文件。如果第二个文件已经包含信息,脚本将读取写入文件的最后一行,在第一个文件中找到该条目,然后从该条目开始。然而,在读写第二个文件时,我遇到了麻烦

    当我将第二个文件类型设置为“r+”然后对文件_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)
    
    当我将第二个文件类型设置为“r+”然后对文件_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+”时,两次文件都显示为完全空,尽管我可以清楚地看到文本文件中的信息确实存在


    当您
    打开(“test.txt”,“a+”
    时,文件指针设置为文件的末尾,因此任何读取尝试都将产生空字符串。实际上,这就是允许您附加到文件的内容。如果您
    file\u two.seek(0)
    然后
    file\u two.write()
    ,则写入的文本将添加到
    file\u two

    的开头,并将文件名作为输出文件:输入错误?我想您的意思是
    将open(filename,'a+')作为输出文件:
    。该文件已在脚本前面使用argparse打开,该代码只需将所有信息写入该文件,然后在完成后关闭该文件。