Newbie программист здесь. Я только начал изучать Python и столкнулся с моей первой реальной проблемой, которая вызывает небольшую головную боль.Получение непоследовательного результата при чтении строк в Python?
В принципе, я создал программу, которая читает текстовый файл с разделителями табуляции и создает папки для соответствующих лет и дат (как указано в текстовом файле). В течение каждого месяца папка представляет собой файл с именем «archivedata.txt». Это содержит ключи строк для соответствующих записей в текстовом файле. Все прекрасно, насколько это возможно - клавиши строк записываются в каждый файл «archivedata.txt» без проблем.
Моя проблема в том, что когда я пытаюсь подсчитать строки в каждом текстовом файле, я получаю неправильный вывод только для одного текстового файла. Он имеет 1 строку, но моя программа не признает этого. При попытке прочитать другой .txt-файл, который является тем же самым, хотя (вплоть до «\ n» новой строки в конце файла), он возвращает правильный ответ.
Я попытался поместить оба этих файла в один и тот же каталог и подсчитать строки, и оба они возвращают 1 в этом случае. Итак ... Я в тупике.
каталог Файл выглядит следующим образом:
newprototype/
archive/
date/
2012/
12/
archivedata.txt # this is the file that won't read properly
2014/
06/
archivedata.txt # this file is nearly identical and reads no probs?
код я использую называется textfileparser_4.py и хранится в папке «newprototype». Вот код, я использую для чтения файлов:
for files in os.walk(projectdir):
if files[2] == ['archivedata.txt']: #if 'archivedata.txt' is found
os.chdir(files[0])
print os.getcwd()
archivecount = 0
archivepoint = open("archivedata.txt")
for line in archivepoint:
archivecount += 1
print archivecount
print "-----"
О, и кстати: переменная «ProjectDir» указывает на «newprototype каталоге» :)
В соответствии с просьбой, мой выход. Это показывает больше каталогов, чем я приводил в приведенном выше примере. Я только привел этот пример, чтобы показать, что «2014/06» также имеет файл с одной строкой и отлично отпечатывается.
/dir/New Prototype/archive/date/2012/12
**There is nothing here** I expect '00004' to show up here.
-----
/dir/New Prototype/archive/date/2012/11
00003
00002
00001
-----
/dir/New Prototype/archive/date/2014/06
00010
-----
/dir/New Prototype/archive/date/2014/10
00007
00006
00005
Update мне удалось решить эту проблему, используя другой метод, который является более эффективным и избежать необходимости для меня, чтобы сделать это. Тем не менее было бы любопытно узнать, что могло вызвать эту ошибку. Спасибо за помощь!
Последнее обновление: Удалось устранить эту проблему, переустановив старый код. Я редактировал часть, в которой были созданы файлы archivedata.txt. Перед закрытием я добавил file.seek (0,0). Все это исправлено. Я не уверен, что это то, что я должен был знать, но я усвоил этот трудный путь. Надеюсь, это будет полезно для кого-то!
«но моя программа не признает это» - то, что он делает вместо этого? Попробуйте добавить в свой код дополнительные инструкции печати, чтобы отслеживать, что происходит, например. 'print files'. Кроме того, ваш код будет повторно открывать один и тот же файл, потому что открытие файла не зависит от его нахождения в текущем каталоге. – Stuart
Привет, Стюарт, Я не понял вторую часть вашего сообщения, а затем понял, что неправильно записал код в своем исходном сообщении (он всегда выглядел как выше в исходной программе). Вместо того, чтобы печатать текущий каталог (2012/12 /), а затем «1», он печатает «2012/12» и «0». – mailamarco
ОК. Попробуйте заменить 'для строки в архивной точке: archivecount + = 1' с' print archivepoint.read() 'и посмотреть, какие файлы он читает. – Stuart