Вопрос по python, file-io, file – Чтение и запись файлов в Python

1

Я пишу сценарий, который имеет два входа:

a file containing a list of names, a different file (can be empty or non-empty)

Цель сценария - взять имена из первого файла, получить доступ к определенному API и получить информацию о каждом имени, а затем записать эту информацию во второй файл. Если второй файл уже содержит информацию, сценарий считывает последнюю строку записанного файла, находит эту запись в первом файле и затем начинает с этой записи. Однако у меня возникают проблемы, когда дело доходит до чтения и записи во второй файл.

Когда я устанавливаю второй тип файла на «r +» и затем сделайте печать на file_two.read (), он показывает содержимое второго файла. Когда я делаю еще одну печать в следующей строке, он показывает, что файл пуст. Кроме того, когда я устанавливаю тип файла на «+», он показывает файл как полностью пустой оба раза, хотя я ясно вижу, что информация в текстовом файле действительно есть. Кто-нибудь знает, что происходит?

Вот сегмент кода, который обрабатывает запись:

<code>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'))
</code>

и здесь сегмент кода, который вызывает вышеуказанную функцию.

<code>file_one = args.file1
file_two = args.file2
users = read_names_automatic(file_one)
write_to_file(file_two, users)
</code>
файл уже был открыт ранее в сценарии с использованием argparse, этот код просто записывает всю информацию в файл, а затем закрывает файл, как только это будет сделано. user1389884
Являетсяwith filename as output_file: опечатка? Я думаю ты имеешь ввидуwith open(filename, 'a+') as output_file:. modocache

Ваш Ответ

1   ответ
3

When I set the second file type to "r+" and then do a print on file_two.read(), it shows the contents of the second file. When I do another print on the very next line, it shows the file as empty.

Да, это ожидаемое поведение. Указатель файла указывает на конец файла в конце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

As well, when I set the file type to "a+", it shows the file as completely empty both times, even though I can clearly see the information in the text file is indeed there.

Когда тыopen("test.txt", "a+")указатель файла устанавливается в конец файла, поэтому любая попытка чтения приведет к пустой строке. Действительно, это то, что позволяетappend в файл. если тыfile_two.seek(0) а потомfile_two.write(), письменный текст будет добавлен в началоfile_two.

Похожие вопросы