在python中解析文件并存储其值时跳过多行
我为这个令人困惑的标题道歉。我对Python非常陌生,下面是我试图实现的目标: 我正在解析一个文件file.txt,其中包含如下数据(以及其他内容): file.txt:在python中解析文件并存储其值时跳过多行,python,string,parsing,data-processing,Python,String,Parsing,Data Processing,我为这个令人困惑的标题道歉。我对Python非常陌生,下面是我试图实现的目标: 我正在解析一个文件file.txt,其中包含如下数据(以及其他内容): file.txt: ... a = ( 1 2 3 ) ... 我需要将此类数据存储在两个部分中: name=“a” 值={(“,“1”,“2”,“3)”} ^每一行都是列表的一个元素 我正在逐行解析文件,如下面的代码段所示,我无法更改它。我不知道如何通过向前看几行来存储数据,存储它们的值,然后跳过它们,这样它们就不会被处理两次当循环位于第一行
...
a = (
1
2
3 )
...
我需要将此类数据存储在两个部分中:
name=“a”
值={(“,“1”,“2”,“3)”}^每一行都是列表的一个元素 我正在逐行解析文件,如下面的代码段所示,我无法更改它。我不知道如何通过向前看几行来存储数据,存储它们的值,然后跳过它们,这样它们就不会被处理两次当循环位于第一行“a=”
with open(file.txt) as fp:
for line in fp:
...
感谢您的帮助。因此,您可以逐行解析文件。每当在一行中找到等号“=”时,就意味着“=”前面的字符就是您想要的名称值。然后下一行是列表的第一个元素,之后的一行是第二个元素,等等。。。当一行包含char“)”时,表示它是列表的最后一个值。 . 试着理解这个概念,编码应该不难
[u'a']
['(', '1', '2', '3', ')']
这是你需要的吗
然后,您可以按照以下代码行操作:
import nltk
name = []
value = []
with open("file.txt") as fp:
for line in fp:
words = line.split()
if ('(') in words:
name.append(words[0].decode('utf-8'))
value.append('(')
else:
for entry in words:
value.append(entry)
print (name)
print (value)
fp.close()
我建议使用字典:
txt=open(r"file.txt","r").readlines()
dictionary=dict()
for i in range(len(txt)):
if "=" in txt[i]:
name,values=txt[i].split()[0],[txt[i].split()[-1]]
dictionary[name],i={"name":name},i+1
while True:
values.append(txt[i])
if ")" in txt[i]:
break
i=i+1
values=[value.replace("\n","") for value in values]
dictionary[name].update({"values":values})
i=i-1
i=i+1
>>dictionary["a"]
Out[40]: {'name': 'a', 'values': ['(', '1', '2', '3 )']}
>>dictionary["b"]
Out[45]: {'name': 'b', 'values': ['(', '3', '4', '6 )']}
如果文件不太大,请将整个文件读入内存,然后使用while循环执行更细粒度的控制:
# python3
with open("file.txt") as f:
lines = f.readlines()
index = 0
while True:
# do something here
否则,如果只有最后一个值包含“'),请执行以下操作:
with open('file.txt') as f:
pairs = []
for line in f:
values = []
name, value = line.strip().split('=')
name = name.strip()
values.append(value.strip())
while True:
line = next(f)
values.append(line.strip())
if ')' in line:
break
pairs.append((name, values))