给定一个包含 10000 行的文件,在 Python 中是否有可能,其中所有文件都具有以下结构:
1、2、xvfrt ert5a fsfs4 df f fdfd56、234
或类似的,读取整个字符串,然后将第 7 列到第 17 列的所有字符(包括空格)存储在另一个字符串中,因此新字符串将是
“xvfrt ert5a”?
非常感谢
给定一个包含 10000 行的文件,在 Python 中是否有可能,其中所有文件都具有以下结构:
1、2、xvfrt ert5a fsfs4 df f fdfd56、234
或类似的,读取整个字符串,然后将第 7 列到第 17 列的所有字符(包括空格)存储在另一个字符串中,因此新字符串将是
“xvfrt ert5a”?
非常感谢
lst = [line[6:17] for line in open(fname)]
another_list = []
for line in f:
another_list.append(line[6:17])
或作为生成器(内存友好的解决方案):
another_list = (line[6:17] for line in f)
我将进一步采取迈克尔狄龙的回答。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)]
你没有说你想如何存储 10,000 行中的每一行的数据——如果你想把它们放在一个列表中,你会做这样的事情:
my_list = []
for line in open(filename):
my_list.append(line[7:18])
这在技术上回答了直接问题:
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
当然,假设这些是许可证密钥。评论不需要太抽象。
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!
此函数将计算您想要的字符串并将其打印出来
def readCols(filepath):
f = open(filepath, 'r')
for line in file:
newString = line[6:17]
print newString