切片仅使用'with open'和'readline'处理文件的最后一行

时间:2013-10-01 14:31:57

标签: loops python-2.7 readline slice

我想要完成的任务:从文件中的行中拉出最后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

1 个答案:

答案 0 :(得分:0)

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

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

其中\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部分,但我们暂时不管它。 :^)