2014-02-12 104 views
0

我需要讀取文件中存儲的字符串逐字。我已經嘗試在單引號和雙引號之間編寫字符串,但似乎並不奏效。從文件中讀取逐字字符串

這裏是我的意思是一個MWE

with open('file.dat', mode="r") as f: 
    for line in f: 
     reader = line.split() 
     # Read string. 
     liter = str(reader[1]) 

print liter 

file.dat文件由單行的,像這樣:

ID " Literal\t : " 

,其中第一列包含的ID,這有助於我識別線第二列應該包含字符串作爲單個元素。

該字符串不總是看起來完全一樣。它可以有,例如在開始時沒有字符(即:"Literal\t : ")的空間,而不是\t字符(即" Literal : ")沒有空格開頭或結尾(即:"Literal\t :")等。

結果我後來是我會做簡單的(在上面的例子中):

liter = ' Literal\t : ' 

我怎麼能這樣做?

+0

更大的數據樣本將幫助。 'line.split(None,1)'和'ast.literal_eval(liter [1])',但通常最好避免使用'literal_eval',除非您對內容有獨佔控制權。 –

+0

如果您是編寫.dat文件的人,爲什麼不使用不同的列分隔符,如「|」? –

+0

你的意思是你的字符串中的「\ t」變成製表符,還是你的意思是它保留兩個字符,一個反斜槓和一個't'?你真的不清楚你想要做什麼以及你的意思是「逐字」。 – Blckknght

回答

2

好吧,如果你的數據是保證總是看正是這樣,你可以只使用一個正則表達式:

import re 

data = ''' 
ID " Literal\t : " 
''' 

for line in data.split('\n'): 
    if line: 
     liter = re.search(r'"(.*)"', line).groups()[0] 
     print(liter) 
     print(repr(liter)) 

結果:

Literal  : 
' Literal\t : ' 
+0

請參閱更新後的問題@senshin,如果您的數據總能保證看起來完全一樣,那麼您的意思是什麼? – Gabriel

+0

@Gabriel我的意思是,如果你的數據的每一行都包含一個不包含雙引號的ID,後面跟着你的文字字符串,這個字符串被雙引號括起來,並且沒有其他任何東西,那麼這將起作用。 – senshin

0

如何使用csv模塊讀你的文件?它支持您想要的任何分隔符,並且可以支持多種引用包含分隔符的文本的方式。它看起來像你需要周圍的字符串包含空格(這是默認的報價風格)的空間分隔和報價:

with open('file.dat', newlines="") as f: # if you're using Python 2, open in binary mode 
    reader = csv.reader(f, delimiter=" ") 
    for line in reader: 
     print(line) # for the example data, line[1] will be " Literal\\t : "