新手程序员在这里。我刚开始学习Python,遇到了第一个真正的问题,引起了一些麻烦。
基本上,我创建了一个程序,它读取制表符分隔的文本文件,并为相应的年份和日期创建文件夹(按照文本文件的指示)。每个月内的文件夹是一个名为“archivedata.txt”的文件。它包含文本文件中相关条目的行键。一切都很好 - 就行了 - 行键写入每个“archivedata.txt”文件没问题。
我的问题是,当我尝试计算每个文本文件中的行时,我只得到1个文本文件的错误输出。它有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
更新我已经设法通过使用更高效的另一种方法来解决这个问题,并避免了我这样做的需要。但仍然很想知道可能导致此错误的原因。谢谢你的帮助!
大更新管理完全通过重新实现旧代码来解决此问题。我编辑了生成archivedata.txt文件的部分。在关闭它们之前,我添加了 file.seek(0,0)。这解决了一切。我不确定这是否是我应该知道的事情,但我学到了很难的方法。希望这对那里的人有用!
答案 0 :(得分:2)
改变这个:
if files[2] == ['archivedata.txt']:
为:
if 'archivedata.txt' in files[2]:
#do your stuff
# insead of chdir, you can call function to with file and do your stuff
更好的是这个:
for x,y,z in os.walk('your_path'):
if 'your_file' in z:
#Do your stuff
os.walk
提供三个元组,即dir,子目录和该目录中的文件
这就是你想要的:
def archive_count(myfile)
archivecount = 0
archivepoint = open(myfile)
for line in archivepoint
archivecount += 1
print myfile + " : " + str(archivecount) + " lines"
print "-----"
for x,y,z in os.walk('your_path'):
if 'archivedata.txt' in z:
archive_count(os.path.join(x,'archivedata.txt'))