2017-03-28 58 views
0

如何將由新行分隔的文本文件轉換爲csv文件。如何將使用python將新行分隔的文本文件轉換爲csv文件

文本文件示例

/themes/modern/user_style.php?user_colors[bg_color]="</style><script></script> 
?<meta http-equiv=set-cookie content="testpokn=7494"> 
/_37040/ 
/clr_cream/ 
reg_req/ 
trackir3pro-1/ 
selector_10274/ 
javascript/orders.html 
perlutil/ 
/carte_ameriques2/ 
/javascript/count.conf 
/glow_chairs/ 

我想轉換這個AS是一個CSV文件。 1列,多行。文本文件的每一行都應該是csv文件中的一行。

的Python

def loadFile(name): 

    directory = os.getcwd() 
    filepath = directory + "/" + name 
    data = open(filepath,'r').readlines() 

    result = [] 
    for d in data: 
     d = str(urllib.parse.unquote(d)) 
     result.append(d) 
    return result 



def main(): 

    data = loadFile('code.txt') 

    with open('new.csv', 'w', newline='') as fp: 
     a = csv.writer(fp,) 
     a.writerows(data) 

main() 

我的問題是,每個燒焦它增加了一個逗號

+0

又是怎樣的問題? – TigerhawkT3

+0

@ TigerhawkT3「/ _37040 /」變成「/,_,3,7,0,4,0」這就是爲什麼它是一個問題。我想要1列多行。 – Kay

+0

如果你只想要一列,你的輸入文件**是**已經是單列CSV文件... –

回答

0

writerows應該使用列表或元組的列表,像[('bla',), ('bla',)]

def main(): 
    data = loadFile('code.txt') 

    with open('new.csv', 'w', newline='') as fp: 
     a = csv.writer(fp,) 
     a.writerows([(r,) for r in data]) 
0

的錯誤輸出來自您的使用writerows。它應該接收迭代(行)的迭代(行)。當你給它一個字符串列表時,它將每個字符串作爲字符的迭代,因此是輸出。

一個簡單的修正將是loadFile返回一個字符串1元組的列表:

def loadFile(name): 

    directory = os.getcwd() 
    filepath = directory + "/" + name 
    data = open(filepath,'r').readlines() 

    result = [] 
    for d in data: 
     d = str(urllib.parse.unquote(d)) 
     result.append((d,)) # result now contains 1-tuple of strings 
    return result 

但無論如何,當你單獨處理每一行,如果將更多的內存友好有這個一般程序結構:

  • 打開輸入文件和輸出CSV(with open(...) as ...
  • 遍歷輸入文件由線(for line in ...:
    • 計算該訂單應該成爲
    • 它寫入到輸出文件
相關問題