在Python中读取行时获得不一致的输出?

时间:2014-11-12 20:05:35

标签: python file

新手程序员在这里。我刚开始学习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)。这解决了一切。我不确定这是否是我应该知道的事情,但我学到了很难的方法。希望这对那里的人有用!

1 个答案:

答案 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'))