如何在一行中读取A列到B列的所有字符

时间:2009-11-10 18:13:41

标签: python text-processing

是否有可能在Python中,给定10000行的文件,其中所有文件都具有以下结构:

1,2,xvfrt ert5a fsfs4 df f fdfd56,234

或类似,读取整个字符串,然后在另一个字符串中存储从第7列到第17列的所有字符,包括空格,所以新字符串将是

“xvfrt ert5a”?

非常感谢

7 个答案:

答案 0 :(得分:7)

lst = [line[6:17] for line in open(fname)]

答案 1 :(得分:5)

another_list = []
for line in f:
    another_list.append(line[6:17])

或作为生成器(内存友好型解决方案):

another_list = (line[6:17] for line in f)

答案 2 :(得分:2)

我将进一步采纳迈克尔狄龙的答案。如果“第6列到第17列”是指“第三个以逗号分隔的字段的前11个字符”,则这是使用csv模块的好机会。此外,对于Python 2.6及更高版本,在打开文件时使用'with'语句被认为是最佳实践。看哪:

import csv
with open(filepath, 'rt') as f:
  lst = [row[2][:11] for row in csv.reader(f)]

这将保留领先的空白;如果您不想这样做,请将最后一行更改为

  lst = [row[2].lstrip()[:11] for row in csv.reader(f)]

答案 3 :(得分:1)

您没有说明如何存储10,000行中的每一行数据 - 如果您希望将它们列在列表中,您可以执行以下操作:

my_list = []

for line in open(filename):
    my_list.append(line[7:18])

答案 4 :(得分:1)

这在技术上回答了直接问题:

lst = [line[6:17] for line in open(fname)]
但是有一个致命的缺陷。对于一次性代码是可以的,但是这些数据看起来像是逗号分隔值,第三个字段甚至可能是以空格分隔的数据块。这样做要好得多,这样如果前两列发出一个额外的数字,它仍然可以工作:

lst = [x[2].strip()[0:11] for x in [line.split(',') for line in open(fname)]]

如果这些空格分隔的块可能会变长,那么:

lst = [x[2].strip().split()[0:2] for x in [line.split(',') for line in open(fname)]]

不要忘记一两条评论来解释发生了什么。也许:

# on each line, get the 3rd comma-delimited field and break out the 
# first two space-separated chunks of the licence key

当然,假设这些是许可证密钥。在评论中无需过于抽象。

答案 5 :(得分:0)

for l in open("myfile.txt"):
   c7_17 = l[6:17]
   # Not sure what you want to do with c7_17 here, but go for it!

答案 6 :(得分:0)

此函数将计算您想要的字符串并将其打印出来

def readCols(filepath):
    f = open(filepath, 'r')
        for line in file:
            newString = line[6:17]
            print newString