2012-08-30 91 views
0

我在這種格式的文本文件中有一個列表。該列表有1000個這樣的條目,這是一個小樣本。從文本文件讀取列表並交換項目

myitems =[ 
     ['some text, A', '12345'], 
     ['place name 1', 'AAA'], 
     ['some text, A', '12345'], 
     ['some text', '12345'], 
     ['some text CC', 'wwww'], 
     ['new text', '12345'], 
     ['other text, A', '12345'], 
    ] 

如何從文本文件中讀取列表並獲取像這樣的輸出。

newItems = [ 
    ['12345', 'some text, A'], 
    ['AAA', 'place name 1'], 
    ['12345', 'some text, A'], 
    ['12345', 'some text'], 
    ['wwww', 'some text CC'], 
    ['12345', 'new text'], 
    ['12345', 'other text, A'], 
] 

我能夠讀取文件並將其作爲字符串操作,但是如何將其作爲列表來處理。打破逗號不是一種選擇,因爲單個列表項可能有逗號。

+0

你在你的文本文件是什麼? 'myitems = [']或逗號分隔的行嗎? –

回答

0

如果真的看起來像那麼

with open(my_file) as f: 
    exec(f.read()) #read in the text and evaluate it in python creating myitems variable 
    my_list = [reversed(l) for l in myitems] 

EXEC是非常危險的,應該最有可能不能使用......但這應該工作

更好的解決方案

#name yourfile with the myitems = [...] to items.py 
import items 
new_items = [reversed(l) for l in items.myitems] 
+1

爲什麼? -1 .... a downvote w沒有評論是毫無價值的...... –

+0

-1''exec()''是一個很差的解決方案,有很多問題。使用''ast.literal_eval()''。 (編輯:我正在寫我的評論,耐心)。 –

+1

是的,我修改了我的答案,說它不好... –

5

的最簡單的就是列表理解:

new_items = [i[::-1] for i in myitems] 
+0

+1 - 作品無論長度的子列表。 – dawg

+0

謝謝。這工作! – Ram

+0

只是出於好奇是切片符號快於顛倒....我想我可以檢查... –

3
newItems = [[b, a] for a, b in myitems] 
+1

+1 - 最明顯的意圖是什麼。 – dawg

1
import sys 

# Reading your file (the path has been passed in argument) and storing each lines in the array called "input" 
input = [] 
with open(sys.argv[1], 'r') as all_lines: 
    for line in all_lines: 
     if line: 
      input.append(line) 

# Creating your array "newItems" 
for j in input: 
    print j 

newItems = [] 
if len(input)>2: 
    for i in range(1, len(input)-1): 
     # Getting content inside brackets. Ex: {{ 'some text, A', '12345' }} 
     my_str = input[i].split("[")[1].split("]")[0] 
     my_elements = my_str.split("'") 

     # Appending elements 
     newItems.append([my_elements[1], my_elements[3]]) 

print newItems 
+0

這可能是他要求的 –

+0

我會斷言my_str.count(「[」)== 1,與「]」相同,並檢查是否有4個「'」字符 –

0
import re 

f = open('myfile.txt', 'r') 
newItems = [] 
for line in f: 
    foo = re.search("\'(.*)\'.*\'(.*)\'", line) #we assume the values are 
               #in single quotes 
    if foo is not None: 
     a, b = foo.groups() 
     newItems.append([b, a]) 
0

讀取該文件,請使用CSV因爲你狀態 '的個別項目可能有逗號'

例子:

如果你的文件實際上是這樣的:

'some text, A','12345' 
'place name 1','AAA' 
'some text, A','12345' 
'some text','12345' 
'some text CC','wwww' 
'new text','12345' 
'other text, A','12345' 

然後這段代碼讀取csv文件並反轉字段:

import csv 

with open('test.csv','rb') as csvIN: 
    for row in csv.reader(csvIN, delimiter=',',quotechar="'"): 
     print row 
     row=row[::-1] 
     print '==>',row,'\n' 

打印:

['some text, A', '12345'] 
==> ['12345', 'some text, A'] 

['place name 1', 'AAA'] 
==> ['AAA', 'place name 1'] 

['some text, A', '12345 '] 
==> ['12345 ', 'some text, A'] 

['some text', '12345'] 
==> ['12345', 'some text'] 

['some text CC', 'wwww '] 
==> ['wwww ', 'some text CC'] 

['new text', '12345'] 
==> ['12345', 'new text'] 

['other text, A', '12345'] 
==> ['12345', 'other text, A'] 
相關問題