4

我有一个 excel 文件,我将其转换为带有数字列表的文本文件。

test = 'filelocation.txt'

in_file = open(test,'r')

for line in in_file:
    print line

1.026106236
1.660274766
2.686381002
4.346655769
7.033036771
1.137969254

a = []

for line in in_file:
    a.append(line)
print a

'1.026106236\r1.660274766\r2.686381002\r4.346655769\r7.033036771\r1.137969254'

我想将每个值(在每一行中)分配给列表中的单个元素。相反,它正在创建一个由 \r 分隔的元素。我不确定 \r 是什么,但为什么要将它们放入代码中?

我想我知道一种从字符串中删除 \r 的方法,但我想从源头解决问题

4

6 回答 6

5

要接受任何\r, \n,\r\n作为换行符,您可以使用'U'(通用换行符)文件模式:

>>> open('test_newlines.txt', 'rb').read()
'a\rb\nc\r\nd'
>>> list(open('test_newlines.txt'))
['a\rb\n', 'c\r\n', 'd']
>>> list(open('test_newlines.txt', 'U'))
['a\n', 'b\n', 'c\n', 'd']
>>> open('test_newlines.txt').readlines()
['a\rb\n', 'c\r\n', 'd']
>>> open('test_newlines.txt', 'U').readlines()
['a\n', 'b\n', 'c\n', 'd']
>>> open('test_newlines.txt').read().split()
['a', 'b', 'c', 'd']

如果要从文件中获取数字(浮点)数组;请参阅将文件字符串读入数组(以pythonic方式)

于 2012-12-01T05:25:21.927 回答
2

使用rstrip()orrstrip('\r')如果你确定最后一个字符总是\r.

for line in in_file:
    print line.rstrip()

帮助str.rstrip()

S.rstrip([chars]) -> string or unicode

Return a copy of the string S with trailing whitespace removed.
If chars is given and not None, remove characters in chars instead.
If chars is unicode, S will be converted to unicode before stripping

str.strip()删除尾随和前导空格。

于 2012-12-01T05:03:53.210 回答
0

您可以使用 strip() 从行中删除回车符和换行符

line.strip()

IE

for line in in_file:
    a.append(line.strip())
print a
于 2012-12-01T05:03:35.610 回答
0

要解决此问题,请执行以下操作:

for line in in_file:
    a.append(line.strip())
于 2012-12-01T05:04:48.203 回答
0

.strip()删除不需要的空格的行:

lines = []

with open('filelocation.txt', 'r') as handle:
    for line in handle:
        line = line.strip()
        lines.append(line)

        print line

print lines

另外,我建议您使用with ...符号打开文件。它更干净并自动关闭文件。

于 2012-12-01T05:05:18.067 回答
0

首先,我通常喜欢@JF Sebastian 的回答,但我的用例更接近Python 2.7.1:How to Open, Edit and Close a CSV file,因为我的字符串来自文本文件,是从 Excel 作为 csv 输出的,并且是此外使用 csv 模块进行输入。如该问题所示:

至于'rU' vs 'rb' vs ...,csv文件真的应该是二进制的,所以使用'rb'。但是,从将 csv 文件复制到 Windows 上的记事本中的人那里获得 csv 文件并随后与其他一些文件合并,这样您就有了时髦的行尾,这并不少见。您如何处理取决于您的文件和您的偏好。– @kalhartt 1 月 23 日 3:57

我将坚持按照python 文档中的建议阅读“rb” 。现在,我知道单元格中的 \r 是我使用 Excel 的怪癖的结果,所以我将创建一个全局选项来替换 '\r' 用其他东西,现在将是 ' \n',但稍后可能是 '' (一个空字符串,不是双引号),只需简单的 json 更改。

于 2013-12-29T15:49:21.113 回答