2016-12-31 32 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 
相关问题