2015-08-15 22 views
2

我有一個CSV串條之後的Python不需要的空行

"AA","AB","AC" 
"BA","BB","BC" 
"CA","CB","CC" 

去除之後的字符串說「CSV格式更改

AA,AB,AC 

BA,BB,BC 

CA,CB,CB 

我應該怎麼做,以避免不必要的線路?

import fileinput 
for line in fileinput.FileInput("test.csv",inplace=1): 
    line = line.replace('"','') 
    print (line) 

回答

5

看起來像你打印它,看起來像Python 3,看起來像你的文件內容已包括必要的換行符。因此,你需要告訴print()功能不添加自己的新行:

print(line, end='') 
+0

打我給它)。 – Cyphase

+2

你想'結束',而不是'sep'。 – Cyphase

+1

糟糕。我比'end'更頻繁地使用'sep'。 – TigerhawkT3

1

你爲什麼要這麼做?您應該使用csv模塊,它將處理,以及您的報價。示例 -

import csv 
with fileinput.FileInput('test.csv',inplace=1) as f: 
    reader = csv.reader(f) 
    for row in reader: 
     print (','.join(row)) 

示例/演示 -

>>> import csv 
>>> with fileinput.FileInput('test.csv',inplace=1) as f: 
...  reader = csv.reader(f) 
...  for row in reader: 
...   print(','.join(row)) 
... 
AA,AB,AC 
BA,BB,BC 
CA,CB,CC 
+0

我認爲OP想要更新文件,因此使用'fileinput'。這可能不是一個有效的假設:) – mhawke

+0

csv模塊也可以使用fileinput。更新代碼和示例。 –

+0

將fileinput與csv結合起來效果很好。 – mhawke

0

你看到額外的線路,因爲線從文件中讀取與「\ n」和打印結束(行)語句追加一個額外的換行符。

可以使用rstrip()可以以汽提出其後的換行符:

import fileinput 
for line in fileinput.FileInput("test.csv",inplace=1): 
    line = line.rstrip().replace('"','') 
    print (line) 
2

當讀取每個行包括終止新行字符。此外print()也將增加一個新的線,所以你最終有兩個新的線。

但是,您並未使用strip(),正如您的問題標題所示。

要解決這個問題,你可以使用rstrip()在每行的結尾,以消除任何空白:

import fileinput 
for line in fileinput.FileInput("test.csv",inplace=1): 
    line = line.replace('"','').rstrip() 
    print (line) 

這將擺脫多餘的新行的字符,但請注意,它也將刪除其他空白在行末。

另一種方法是防止print()添加其自己的新行:

的Python 2:

print(line), # comma prevents new line 

的Python 3:

print(line, end='') 
+0

只是好奇:爲什麼在Python 2版本中的parens? –

+0

@ron。rothman:僅僅是因爲OP在問題中有他們的問題,我不清楚OP是使用Python 2還是Python 3.他們在Python 2中沒有受到傷害,所以我把它們留在了那裏。 – mhawke

+0

從技術上講,在Python 2中添加括號可以將'print 1,2,3' - >'1 2 3'變成'print(1,2,3)' - >'(1,2,3)'。然而,這不是一個問題,因爲這個問題涉及字符串。 – TigerhawkT3