2016-12-31 59 views
1

我有一個2-D列表myList [r] [c],其中有r列各有c列。Python二維列表:導出爲分隔文本文件

我試圖將其導出到一個文本文件中,每個列元素由管道分隔| ,並在每行末尾加上&符號&。

myList = [[[] for a in range(c)] for b in range(r)] 

{a bunch of code populating myList} 

f = open("myfile.txt","w") 
for x in range(0,r): 
    thisRow = '' 
    for y in range(0,c): 
      appendThis = myList[x][y] 
      thisRow += appendThis + "|" 
    f.write(thisRow) 
    f.write("&") 
f.close 

...但我得到TypeError: can only concatenate list (not "str") to list就行了,我添加了管道字符。

回答

2

csv模塊是爲此而設計的。 Python的2.7例如:

import csv 
r=7 
c=5 
myList = [[b*10+a for a in range(c)] for b in range(r)] 

with open("myfile.txt","wb") as f: 
    w = csv.writer(f,delimiter='|',lineterminator='&\r\n') 
    w.writerows(myList) 

輸出:

0|1|2|3|4& 
10|11|12|13|14& 
20|21|22|23|24& 
30|31|32|33|34& 
40|41|42|43|44& 
50|51|52|53|54& 
60|61|62|63|64& 
2

Python有CSV大力支持。是從example直改編以下:

import csv 
with open('myfile.txt', 'wb') as csvfile: 
    mywriter = csv.writer(csvfile, delimiter='|',lineterminator='&', 
          quotechar='"', quoting=csv.QUOTE_MINIMAL) 
    mywriter.writerow(myList) 

注意使用lineterminator,如果你想在每行有一個&末以及新的線,你可以使用「& \ r \ n」作爲終結者。

如果我有你的行和列mixedup,請注意,你可以這樣做

for line in myList: 
    mywriter.writerow(line) 
2

所以在這裏你有一個工作版本。 問題是在第一線,在這裏你有:

myList = [[[] for a in range(c)] for b in range(r)] 

但這只是創建陣列的2-d陣列,我已經與僅包含其元素的索引數組取而代之。 (現在也增加了換行符到行結尾。)

myList = [[a for a in range(c)] for b in range(r)] 


f = open("myfile.txt","w") 
for x in range(0,r): 
    thisRow = '' 
    for y in range(0,c): 
     appendThis = myList[x][y] 
     thisRow += str(appendThis) + "|" 
    f.write(thisRow) 
    f.write("&\n") 
f.close 
相關問題