24

我有一个清单:

Cat
Dog
Monkey
Pig

我有一个脚本:

import sys
input_file = open('list.txt', 'r')
for line in input_file:
    sys.stdout.write('"' + line + '",')

输出是:

"Cat
","Dog
","Monkey
","Pig",

我想要:

"Cat","Dog","Monkey","Pig",

我无法摆脱处理列表中的行时出现的回车。最后摆脱 , 的奖励点。不知道如何找到并删除最后一个实例。

4

3 回答 3

28

str.rstrip或简单的str.strip是从文件读取的数据中拆分回车符(换行符)的正确工具。注意 str.strip 将从两端删除空格。如果您只对剥离换行感兴趣,只需使用strip('\n')

换行

 sys.stdout.write('"' + line + '",')

sys.stdout.write('"' + line.strip() + '",')

请注意,在您的情况下,一个更简单的解决方案是

>>> from itertools import imap
>>> with open("list.txt") as fin:
    print ','.join(imap(str.strip, fin))


Cat,Dog,Monkey,Pig

或仅使用列表理解

>>> with open("test.txt") as fin:
    print ','.join(e.strip('\n') for e in  fin)


Cat,Dog,Monkey,Pig
于 2013-02-21T16:42:32.003 回答
11

您可以使用.rstrip()从字符串的右侧删除换行符:

line.rstrip('\n')

或者您可以告诉它删除所有空格(包括空格、制表符和回车符):

line.rstrip()

它是从字符串两侧删除空格或特定字符的.strip()方法的更具体版本。

对于您的特定情况,您可以坚持使用简单.strip()的方法,但对于您只想删除换行符的一般情况我会坚持使用 `.rstrip('\n')。

我会使用不同的方法来编写你的字符串:

with open('list.txt') as input_file:
    print ','.join(['"{}"'.format(line.rstrip('\n')) for line in input_file])

通过使用','.join()你避免了最后一个逗号,并且使用该str.format()方法比很多字符串连接更容易(更不用说更快了)。

于 2013-02-21T16:43:58.007 回答
1

首先,为了让它全部出现在一行上,你应该去掉'\n'. 我发现line.rstrip('\n')工作得很好。

为了摆脱最后的“,”,我会将所有单词放在一个列表中,并加上引号。然后使用join(),用“,”连接列表中的所有单词

temp = []
for line in file:
    i = line.rstrip('\n')
    word = '"'+i+'"'
    temp.append(word)
print ",".join(temp)

那应该得到所需的输出

于 2013-02-21T16:48:28.000 回答