2017-08-13 50 views
2

首先,我使用此:Python 3中,讀取文本文件和獨立的每一行,並在相應的變量填

with open(filename) as fp: 
    for i, line in enumerate(fp):  
     print(i) 
     print(line) 
     if i == index: 
      break 
     else: 
      continue 

這使我能夠輸出每行,直到(ⅰ)到達索引變量的數量,但這不是我想要的,我想讀一個文件,它看起來有點像這樣:

John|Graham|JOB|AGE 
Philip|Jefferson|JOB|AGE 

我希望能夠將這些數據解析成對應的變量,但!我希望能夠指定從讀哪一行,這樣我就可以在線閱讀1,從那裏解析數據,然後第2行,但不是在一個循環!這是重要的組成部分。

我希望能夠設置變量(index)來假設2

然後2號線將解析第一段「菲利普」到變量名。

等。

我希望你明白!我一直很沮喪,我一直沒能拿出一個解決方案。

+0

所以你想設置'index = 2',然後你的代碼將得到Philip的行並將他的所有數據存儲到單獨的變量中。那是對的嗎? –

+0

查找語法分裂() – diek

+2

我不明白爲什麼不能在一個循環中讀取是很重要的。你想解析一行還是一整行? – Gribouillis

回答

2

這裏的東西應該工作:

首先我們需要得到所有行都讀入列表中。

>>> with open('in.txt', 'r') as f: 
>>>  lines = f.read().splitlines() 

現在我們可以很好地指數在:

>>> print(lines[0]) 
    John|Graham|JOB|AGE 

好了,現在我們要分開每個行成我們需要的數據。

>>> first = lines[0] 
>>> info = first.split('|') 
    ['John', 'Graham', 'JOB', 'AGE'] 

然後把一切都變成變量:

>>> NAME, LASTNAME, JOB, AGE = info 
>>> print(NAME) 
    John 
>>> print(LASTNAME) 
    Graham 

全部放在一起:

with open('in.txt', 'r') as f: 
    lines = f.read().splitlines() 

def get_info(lines, line_num): 
    line = lines[line_num] 
    return line.split('|') 

NAME, LASTNAME, JOB, AGE = get_info(lines, 0) 
print(NAME) # Prints "John" 

如果你不想在整個文件讀取一次,您可以在腳本中使用相同的技術:

with open(filename) as fp: 
    for i, line in enumerate(fp):  
     print(i) 
     print(line) 
     if i == index: 
      NAME, LASTNAME, JOB, AGE = line.split('|') 
      break 
+0

謝謝,PM 2Ring!編輯。 –

+0

這看起來像它!非常感謝,這將有助於很多! – Simontaga

+1

@Simontaga請注意這個答案是如何將整體問題分解成小的可管理步驟的。這是您作爲計算機程序員開發需要的最重要技能之一。我希望這是一個很好的例子,這樣你就可以在繼續學習編程的時候自己培養這個技能。祝你好運。 –

0

您可以使用字典,讓您通過索引來訪問的每一行:

the_dict = {i:a.strip('\n') for i, a in enumerate(open('filename.txt'))} 

輸出:

{0: 'John|Graham|JOB|AGE', 1: 'Philip|Jefferson|JOB|AGE'} 
相關問題