2013-07-10 48 views
1

我正在將一行一行寫入外部文件。每行有9個由Tab分隔符分隔的列。如果我在該文件中分割每行並輸出最後一列,我可以看到\ n被添加到9列的末尾。我的代碼是: n在每行尾附加

#!/usr/bin/python 

with open("temp", "r") as f: 
    for lines in f: 
     hashes = lines.split("\t") 
     print hashes[8] 

最後一列的值是整數,1或2。當我運行這個程序,輸出我得到的是,

['1\n'] 
['2\n'] 

我應該只得到1或2。爲什麼在這裏附加'\ n'?

我嘗試了以下檢查以消除該問題。

with open("temp", "r") as f: 
    for lines in f: 
      if lines != '\n': 
        hashes = lines.split("\t") 
        print hashes[8] 

這也不起作用。我試過if lines != ' '。我怎樣才能讓它消失?提前致謝。

回答

1

因爲每行有9列,所以第8個索引(它是第9個對象)有一個換行符,因爲下一行開始。只要拿走它:

print hashes[8][:-1] 
+1

這將修改一些柱狀數據。 ''\ n''是單個字符。所以'哈希[8] [: - 1]'是我認爲你在 – inspectorG4dget

7

嘗試使用strip來刪除\n(新行字符)。 strip刪除前導和尾隨空白字符。

with open("temp", "r") as f: 
    for lines in f.readlines(): 
     if lines.strip(): 
      hashes = lines.split("\t") 
      print hashes[8] 
3

\ n是換行符,它是計算機知道如何在下一行顯示數據。如果修改數組哈希中的最後一項[-1]以刪除最後一個字符,那應該沒問題。

+0

+1之後才能真正解釋發生了什麼,但是你應該提及'strip'函數。 –

2

根據平臺的不同,您的行尾可能不止一個字符。例如,Dos/Windows使用"\r\n"

def clean(file_handle): 
    for line in file_handle: 
     yield line.rstrip() 

with open('temp', 'r') as f: 
    for line in clean(f): 
     hashes = line.split('\t') 
     print hashes[-1] 

我更喜歡rstrip()的時候,我想保留領先的空白。這並使用生成器函數來清理我的輸入。