2013-10-30 43 views
0

我想从文本文件中的多行中获取前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-######)。

感谢您的帮助。

回答

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 
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开始,你就必须修改模式过于它们匹配,但是这不应该如果你知道你在找什么,那就太复杂了。