2015-08-15 50 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