1

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

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

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

“xvfrt ert5a”?

非常感谢

4

7 回答 7

7
lst = [line[6:17] for line in open(fname)]
于 2009-11-10T18:18:40.363 回答
5
another_list = []
for line in f:
    another_list.append(line[6:17])

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

another_list = (line[6:17] for line in f)
于 2009-11-10T18:17:36.653 回答
2

我将进一步采取迈克尔狄龙的回答。csv如果“第 6 到 17 列”是指“第三个逗号分隔字段的前 11 个字符”,那么这是使用该模块的好机会。此外,对于 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)]
于 2009-11-11T15:09:54.373 回答
1

你没有说你想如何存储 10,000 行中的每一行的数据——如果你想把它们放在一个列表中,你会做这样的事情:

my_list = []

for line in open(filename):
    my_list.append(line[7:18])
于 2009-11-10T18:17:44.460 回答
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

当然,假设这些是许可证密钥。评论不需要太抽象。

于 2009-11-10T19:54:51.770 回答
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!
于 2009-11-10T18:16:51.467 回答
0

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

def readCols(filepath):
    f = open(filepath, 'r')
        for line in file:
            newString = line[6:17]
            print newString
于 2009-11-10T18:19:29.090 回答