是否有可能在Python中,给定10000行的文件,其中所有文件都具有以下结构:
1,2,xvfrt ert5a fsfs4 df f fdfd56,234
或类似,读取整个字符串,然后在另一个字符串中存储从第7列到第17列的所有字符,包括空格,所以新字符串将是
“xvfrt ert5a”?
非常感谢
答案 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