簡體   English   中英

從文本文件中讀取的數據到python中的兩個列表中

[英]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 juicyvery 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM