1

我要完成的工作:从文件中的行中提取最后 8 个字符,将它们分成两个字符块,将这些块与我的字典进行比较,然后列出结果。这实际上是我在 python 中做的第一件事,我的头在旋转,这里有所有的答案。
我想我需要基本的游泳指导,每一个答案似乎都是自由潜水世界纪录的入门。

我正在使用以下代码(现在我将 h1 到 h4 注释掉,因为它没有返回我字典中的键):

d1 = {'30': 0, '31': 1, '32': 2, '33' : 3, '34': 4, '35': 5, '36': 6, '37': 7,  '38':  8, '39': 9,
  '41': 'A', '42': 'B', '43': 'C', '44': 'D', '45': 'E', '46': 'F'}



filename = raw_input("Filename? > ")

with open(filename) as file:

for line in iter(file.readline, ''):
    h1 = line[-8:-6]
    h2 = line[-6:-4]
    h3 = line[-4:-2]
    h4 = line[-2:]


    #h1 = d1[h1]
    #h2 = d1[h2]
    #h3 = d1[h3]
    #h4 = d1[h4]

    print h1,h2,h3,h4

这是我用作输入的 txt 文件的一部分:

naa.60000970000192600748533031453442
naa.60000970000192600748533031453342
naa.60000970000192600748533031453242
naa.60000970000192600748533031453142
naa.60000970000192600748533031434442
naa.60000970000192600748533031434342
naa.60000970000192600748533031434242
naa.60000970000192600748533032363342

当我运行我的脚本时,这是上面代码生成的输出:

14 53 44 2

14 53 34 2

14 53 24 2

14 53 14 2

14 34 44 2

14 34 34 2

14 34 24 2

32 36 33 42

最后一行看起来完全符合我的预期。所有其他行已移动或丢失字符。我为此不知所措......我尝试了许多不同的方法来在 python 中打开文件,但无法让它们循环通过,或者有其他问题。

我在这里缺少一个简单的解决方法吗?谢谢,j

4

1 回答 1

0

我怀疑发生的事情是您阅读的每一行最后都有一个回车,除了最后一个。所以最后一个是对的,但是其他的基本上是在拆分字符串的最后一部分。IOW,我认为您的文件行看起来像

>>> open("demo.txt").readline()
'naa.60000970000192600748533031453442\n'

其中 the\n是回车的符号,并且只有一个字符(不是\+ n)。我可能会写你的代码

with open(filename) as myfile:
    for line in myfile:
        line = line.strip() # get rid of leading and trailing whitespace

        h1 = line[-8:-6]
        h2 = line[-6:-4]
        h3 = line[-4:-2]
        h4 = line[-2:]

        print h1,h2,h3,h4

对我来说产生

Filename? > demo.txt
31 45 34 42
31 45 33 42
31 45 32 42
31 45 31 42
31 43 44 42
31 43 43 42
31 43 42 42
32 36 33 42

我们可以简化这些h部分,但现在我们将不理会它。:^)

于 2013-10-01T15:02:22.667 回答