2013-10-30 38 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開始,你就必須修改模式過於它們匹配,但是這不應該如果你知道你在找什麼,那就太複雜了。