首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python 3通过readline向列表添加空字符串

Python 3通过readline向列表添加空字符串
EN

Stack Overflow用户
提问于 2018-08-08 05:21:14
回答 1查看 365关注 0票数 0

我试图从一个txt文件中提取并将它们放入一个变量中。下面是我的代码:

代码语言:javascript
复制
#file_len function, got it from somewhere on stack exchange
def file_len(fname):
    with open(fname) as f:
        for i, l in enumerate(f):
            pass
    return i + 1
#various variables, containing names/files
#wordList File, stores all the words
wordListFileName = '/Users/k/Desktop/Cyber/HashCrack/wordlist.txt'
wordListFile = open(wordListFileName)
#wordList list, stores all the words from the wordList file
wordList = []
#passList file, stores all the passwords
passListFileName = '/Users/k/Desktop/Cyber/HashCrack/passlist.txt'
passListFile = open(passListFileName, 'w')
#for loop, gets all the words in the wordList file, stores them in wordList list
for i in range(0, 185051):
if wordListFile.readline(i) == '':
    print('skipped empty line ' + str(i))
else:
    wordList.append(wordListFile.readline(i).strip('\n'))
    print('added ' + wordListFile.readline(i).strip('\n') + ' to wordList under number ' + str(i) + ' and word ' + wordList[i-1])

因此,for循环跳过wordlist.txt文件中的任何空行,如果它们不为空,则将它们添加到wordList列表中。然而,出于某种奇怪的原因,它不喜欢前三行,并将它们作为空行放入变量中。它为什么要这么做?当然,它们不是世界上最重要的单词,但我仍然希望它能使用它们。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-08 05:43:07

首先,调用readline检查该行是否为空:

代码语言:javascript
复制
if wordListFile.readline(i) == '':
    print('skipped empty line ' + str(i))

因为您使用size=i调用它,所以您最多只能读取i字符。对于第一行,它是0。对于每隔一行,它都大于0,所以它永远不会再次触发(除非到达EOF),因为一行总是至少有一个字符(换行符)。

然后,如果没有触发,那么不使用您读到的行,而是读另一行:

代码语言:javascript
复制
wordList.append(wordListFile.readline(i).strip('\n'))

尽管您可能没有读取整行代码,因为您传递的是一个size参数。

然后你又读了另一行:

代码语言:javascript
复制
print('added ' + wordListFile.readline(i).strip('\n') + ' to wordList under number ' + str(i) + ' and word ' + wordList[i-1])

因此,你切断了所有早期行的开始,并通过读取它们而跳过了几乎三分之二的行,而不是将它们添加到列表中,而您的空测试实际上只是测试成为第一行。

您可能想要做的就是调用不带大小的readline(),并且只调用一次,而不是连续调用三次。

或者,更好的方法是直接迭代文件,就像您在代码顶部对另一个文件所做的那样。

我不确定您为什么要停在185051行,但我假设这是有原因的。因此,让我们用一个范围来表示它们,而不是enumerate行:

代码语言:javascript
复制
for i, line in zip(range(185051), wordListFile):
    line = line.strip('\n')
    if not line:
        print('skipped empty line ' + str(i))
    else:
        wordList.append(line)
        print('added ' + line + ' to wordList under number ' + str(i) + ' and word ' + wordList[i-1])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51735607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档