[英]data read from a text file into two lists in python
我的文本文件格式是:
apple very healthy
orange tangy and juicy
banana yellow in color and yummy
我需要創建兩個列表:
l1 = ['apple','orange','banana']
l2=['very healthy','tangy and juicy','yellow in color and yummy']
或將值轉換為字典:
d1={'apple':'very healthy','orange':'tangy and juicy','banana':'yellow in color and yummy'}
文件中的前兩列由制表符分隔。
我嘗試了以下代碼將其更改為兩個列表,然后將其轉換為字典:
l1=[]
l2=[]
d={}
read_file=open('edges.txt','r')
split= [line.strip() for line in read_file]
for line in split:
l1.append(line.split('\t')[0])
l2.append(line.split('\t')[1:])
d=dict(zip(l1,l2))
print d
我得到了一些不正確的值。 我是python的新手..
確保您的文本文件包含這些值之間的選項卡,我從這里復制的內容有空格。
文本文件:
apple very healthy
orange tangy and juicy
banana yellow in color and yummy
腳本的輸出:
{'orange': ['tangy and juicy'], 'apple': ['very health'], 'banana': ['yellow in color and yummy']}
問題可能是文件的列實際上不是由制表符分隔的,而是由多個空格分隔的(實際上,您發布的“文本文件格式”不使用制表符)。 解決此問題的一種方法是:
l1=[]
l2=[]
d={}
read_file=open('edges.txt','r')
split= [line.strip() for line in read_file]
for line in split:
l1.append(line.split(' ')[0].strip())
l2.append(' '.join(line.split(' ')[1:]).strip())
d=dict(zip(l1,l2))
print d
如果至少使用了兩個空格,這將改為分隔兩列。 但是,如果您實際使用選項卡,這將不起作用,在這種情況下,您應該使用原始代碼。 並且,如果沒有任何值(例如tangy and juicy
, very healthy
)在其中連續兩個空格,您可以替換
' '.join(line.split(' ')[1:]).strip()
和
line.split(' ')[1].strip()
line.split('\\t')
返回一個列表,而line.split('\\t')[0]
返回該列表的第一個元素('apple'、'orange'、'banana')。
l2.append(line.split('\\t')[1:]
返回一個列表,因為[1:]
是一個slice 。也許你想要l2.append(line.split('\\t')[1]
代替?
我忍不住重寫了代碼:
d={}
for line in open('edges.txt','r'):
split = line.strip().split('\t', 1)
d[split[0]] = split[1]
print d
進口重新
d = {}
with open('data') as f:
for line in f:
mobj = re.match('(\w+)\s+(.*)',line)
key, value = mobj.groups()
d[key] = value
for k,v in d.items():
print(k," ", v )
輸出
香蕉黃色,好吃
蘋果很健康
橙汁濃郁多汁
如果您的文本文件實際上是固定寬度的(即包含空格而不是制表符),您可以簡單地使用索引對前 10 個字符(作為字典中的鍵)和第 11 個字符(作為值)進行切片來解析它.
fruits = {line[:10].strip(): line[10:].strip() for line in read_file}
這個問題有一些關於解析更復雜的固定寬度文本文件的答案; 你也可以使用pandas.read_fwf
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.