我正试图从文本文件中的多行中获取前10个字符。这就是我的线条:
Mon-000101,100.27242,9.608597,11.082,10.034,0.39,I,0.39,I,31.1,31.1,,double with 1355,,,,,,,,
Mon-000171,100.2923,9.52286,14.834,14.385,0.45,I,0.45,I,33.7,33.7,,,,,,,,,,
Mon-000174,100.27621,9.563802,11.605,10.134,0.95,I,1.29,I,30.8,30.8,,,,,,,,,,
Mon-000191,100.28709,9.495832,9.231,8.105,1,I,1.01,I,0,0,,on spike,,,,,,,,
我只想要各行的Mon-000101
部分。我知道我通常会这样做:
line[0:10]
瞧,瞧,我已经拥有了。但是我试图在整个文件中执行此操作,而我只得到第一个结果。
这是我认为可能有用的微小代码:
f = raw_input("Enter the path and filename of the file: ")
f1 = open(f)
for line in f1:
print line
但它只给了我切片的第一行(正确切片)。这有可能在所有线路上完成吗?
新信息:看来我的文字文件只是一条长线,这就解释了为什么我只打印出第一张ID。我需要帮助搞清楚如何只提取ID(Mon-######
)。
感谢您的帮助。
答案 0 :(得分:1)
In [47]: %paste
with open('blah') as infile:
line = []
for char in itertools.chain.from_iterable(infile):
if line.count(',') < 20:
line.append(char)
else:
print ''.join(line[:10])
line = [char]
## -- End pasted text --
Mon-000101
Mon-000171
Mon-00017
Mon-000191
答案 1 :(得分:0)
如果没有关于文件实际格式的更多信息,回答这个问题会有点困难。你说它实际上可能是一行,但这是否意味着你认为行之间没有真正的分隔符,或者它只是不是换行符?
如果您有其他分隔符,可以尝试:
with with open(filename) as f:
data = f.read() # read all data into one string
for line in data.split(whatever_the_real_line_delimiter_is):
print line[:10]
另一方面,如果确实没有分隔符,则需要依赖要查找的项目的详细信息来识别它们。正则表达式搜索可以做到这一点:
import re
with open(filename) as f:
data = f.read() # read all data into one string
for value in re.finditer(r'Mon-\d{6}', data):
print value
如果你想要抓取的某些值实际上并不是以Mon
开头,那么你必须修改模式以匹配它们,但如果你知道你的话,这不应该太复杂正在寻找。