Ничего не добавляется (пишется) в мой текстовый файл из моего кода Python - PullRequest
0 голосов
/ 21 февраля 2019

Я написал код, в котором я пытаюсь выделить некоторые строки из текстовых файлов и добавить их в другой текстовый файл;

У меня есть папка:

E:\ Adhiraj Chattopadhyay \ NLG Dataset \ FYP DB У меня есть несколько подпапок, каждая из которых содержит текстовый файл .Итак, я ввел этот каталог в мой python intrpreter;

import os
path = "E:\\Adhiraj Chattopadhyay\\NLG Dataset\\FYP DB"
os.chdir(path)

Теперь я создал файл с разрешениями на чтение и запись;

file1 = open('file1.txt', 'r+' ) 
data = file1.read()

Теперь у меня естьнаписал код на Python, который должен пройти по всем папкам в FYP DB для поиска в них текстовых файлов. Если текстовый файл (ы) найдено, код ищет текст в извлекает все строки со словом Table в них ;

    for (dirname, dirs, files) in os.walk('.'):
        for filename in files:
           if filename.endswith('.txt'):
               for line in filename:
                   if 'Table' in line:
                   # print (line.split(':'))
                      file1.write(line.split(':'))
print(data)

Код должен записывать эти строки в file1

Вот где я сталкиваюсь с моей проблемой!

Когда я печатаю содержимое файла1 (данных), появляется нет вывода. Когда я, а затем открыть файл1 прямо из каталога, откроется пустой файл.

Может кто-нибудь помочь мне с этим?

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Обычно файлы открываются в Python с соглашением:

with open('file1.txt','r+') as my_file_variable_name:
    my_file_variable_name.readlines()
    # or
    my_file_variable_name.write("hello world")

Так что это может быть проблемой.Это также может быть ошибка в вашем коде для сбора данных, но если ваш # print (line.split(':')) даст вам ожидаемые результаты, то, скорее всего, это не так.Я бы порекомендовал вам открыть все нужные вам файлы и сохранить данные в виде переменной (в идеале это список, чтобы он лучше печатался в файл).Затем в конце, когда все это собрано, просто позвоните:

with open('output.txt','w+') as my_file_variable_name:
    my_file_variable_name.write(data)
0 голосов
/ 24 февраля 2019

Я решил это на следующий день.Извините за позднюю публикацию, я был немного занят, иначе.

Так что причина, по которой ничего не печаталось, была в том, что список был пуст;Мой код достигал текстовых файлов, но не читал их :

Я выяснил это, убрав условие if (

if 'Table' в строке)

.При этом заполняется список всех имен текстовых файлов.

Вот код, который сработал; (однако форматирование все еще ужасно, и я работал над этим) (я использовал

os.path.join

)

lines = []               
for (dirname, dirs, files) in os.walk('.'):
    for filename in files:
        if filename.endswith('.txt'):
            thefile = os.path.join(dirname,filename)
            text = open(thefile,'r' , encoding="utf-8" )
            #lines = list()
            for line in text:
                   if 'Table ' in line:
                       lines.append(line.split(':'))
print(lines)     

Это распечатывает список.

Другой предоставил некоторую информацию, за что я благодарен.Я получил необходимую информацию для своего решения от https://www.pythonlearn.com/html-008/cfbook017.html

0 голосов
/ 21 февраля 2019
  1. Это может быть '' (пробел) между FYP и DB, который вызывает проблему.Можете ли вы попытаться заменить его на подчеркивание, например, и посмотреть, что произойдет?
  2. data = file.read(), кажется, помещается в самом начале, перед записью чего-либо в файл, так что в этот момент файлпустой.Печать print(data) тогда ничего не покажет.

  3. Существует два способа работы с файлом: открыть / закрыть ИЛИ с ... как ....Если вы выберете первый, убедитесь, что вы закрыли файл после того, как закончили писать в нем, иначе это может вызвать проблемы (из-за невозможности прочитать его).Оператор 'with' открывает и закрывает файл для вас, это предпочтительный способ работы с файлами.

  4. Убедитесь, что вы правильно сделали отступ для цикла 'for'.Ваш пост показывает, что цикл for имеет неправильный отступ - так ли это в вашем коде?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...