2014-02-12 103 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 : "