2012-12-01 58 views
4

我有一個excel文件,我將其轉換爲帶有數字列表的文本文件。Python。如何擺脫字符串中的' r'?

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的,但我想從源頭上解決問題

回答

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'] 

;看到Reading file string into an array (In a pythonic way)

0

您可以通過使用帶剝去行回車和換行符()

line.strip() 

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

使用rstrip()rstrip('\r')如果你確定不是最後一個字符總是\r。在str.rstrip()

for line in in_file: 
    print line.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()同時去除拖尾和先行空格。

+0

注:'.rstrip()'不會幫助,因爲'線路在in_file'不承認'\ r'爲有機磷農藥的機器上一個換行符所以'line'可能包含多個內部'\ r',試試:''1 \ r2 \ r'.rstrip()' – jfs

0

爲了解決這個問題嗎:

for line in in_file: 
    a.append(line.strip()) 
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 ...符號來打開一個文件。它更乾淨並自動關閉文件。

0

首先,我一般喜歡@ J.F。塞巴斯蒂安的答案,但我的用例更接近Python 2.7.1: How to Open, Edit and Close a CSV file,因爲我的字符串來自文本文件從Excel輸出爲csv並進一步輸入使用csv模塊。截至該問題表示:

作爲「儒的VS「RB」 VS ...,CSV文件確實應該是二進制如此 使用「RB」。然而,從某些人將csv文件複製到Windows的記事本中並且隨後將其與其他文件加入一些 以便您有時髦的行結尾的情況並不鮮見。您如何處理該 取決於您的文件和您的偏好。 - @kalhartt 1月23日3:57

我要堅持閱讀'rb',建議在the python docs。現在,我知道單元格內部的\ r是我如何使用Excel的怪癖的結果,所以我將創建一個全局選項,用其他值代替'\ r',現在它將是' \ n',但後來可能是''(一個空字符串,不是雙引號),只需簡單的json更改。