2013-07-10 5 views
1

Я пишу строки один за другим во внешние файлы. Каждая строка имеет 9 столбцов, разделенных разделителем табуляции. Если я разделяю каждую строку в этом файле и вывожу последний столбец, я вижу, что \ 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

\ п является символом новой строки, то, как компьютер знает, чтобы отобразить данные на следующей строке. Если вы измените последний элемент в хешах массива [-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() за раз, когда я хочу, чтобы сохранить ведущие пробелы. Это и использование функций генератора для очистки ввода.

Смежные вопросы