2012-02-19 1 views
27

Это моя проблема.Python strip с n

Я пытаюсь прочитать текстовый файл, а затем преобразовать строки в поплавки. Текстовый файл имеет \n и \t, хотя я не знаю, как избавиться от него.

Я пробовал использовать line.strip(), но это не снимало его, и я получил сообщение об ошибке, когда захотел преобразовать материал в поплавки. Затем я попробовал line.strip("\n"), но это тоже не сработало. Моя программа отлично работает, когда я вынимаю \t и \n из текстового файла, но это часть задания, чтобы заставить его работать с ними.

Я действительно не знаю, почему это не работает. Спасибо за любую помощь.

+6

Можете ли вы предоставить отрывок из вашего текстового файла? – Josh

+2

Strip только удаляет пробелы с начала и конца строки. Если у вас есть вкладки в середине строки, они не будут удалять их. – Swiss

+2

Стоит отметить, что «\ n» не является символом возврата на всех системах. Вам может потребоваться снять «\ n», «\ r» или «\ r \ n». Если вы продемонстрируете какой-то полный код, который вы попробовали и введите данные, это может быть проще решить. –

ответ

1

библиотека pythons csv хороша для этого.

http://docs.python.org/library/csv.html

CSV = запятые значение, но если установить разделитель = \ т, то он работает для значений, разделенных вкладок тоже.

62

Вы должны уметь использовать line.strip('\n') и line.strip('\t'). Но они не изменяют переменную line ... они просто возвращают строку с \n и \t лишены. Поэтому вам нужно будет сделать что-то вроде

line = line.strip('\n') 
line = line.strip('\t') 

Это должно работать для снятия с начала и конца. Если у вас есть \n и \t в середине строки, вам нужно сделать

line = line.replace('\n','') 
line = line.replace('\t','') 

заменить \n и \t с небытием.

0

Часто, в зависимости от того, как вы читали строки для того, чтобы избавиться от \ п от myline, вы можете взять myline [: - 1] так \ п последний символ myline.

Для «\ т» вы можете использовать замену() или полосы()

1

Если вы пытаетесь преобразовать строки поплавков, разделенных символами табуляции, а затем просто float(line) будет пытаться преобразовать всю строку в один поплавок, который потерпит неудачу, если их больше одного. Использование strip, чтобы избавиться от начального и конечного пробелов, не поможет этой фундаментальной проблеме.

Возможно, вам понадобится split каждой линии на кусочки и сделать что-нибудь с каждой деталью?

2

Как насчет использования python regex pattern?

import re 
f = open('test.txt', 'r') 
strings = re.findall(r"\S+", f.read()) 

И ваш случай line.strip() не будет работать, потому что Python удаляет только начальные и конечные символы

От Python Docs - возвращает копию строки с начальные и конечные символы удалены. Если символы опущены или None, пробельные символы удаляются.Если задано, а не None, символы должны быть строкой; символы в строке будут удалены с обоих концов строки, вызываемой этим методом.

16

Метод strip() удаляет пробелы по умолчанию, поэтому нет необходимости называть его такими параметрами, как '\ t' или '\ n'. Однако строки в Python являются неизменяемыми и не могут быть изменены, то есть вызов line.strip() не изменит объект line. Результатом является новая строка, которая возвращается вызовом.

Как уже упоминалось, это поможет, если вы разместили пример из вашего входного файла. Если в каждой строке содержится более одного номера, то функция strip() не используется. Вместо этого вы должны использовать split(), который также является строковым методом.

В заключение, при условии, что каждая строка содержит несколько поплавков, разделенных пробелами, и что вы хотите построить список всех номеров, вы можете попробовать следующее:

floats = [] 
with open(filename) as f: 
    for line in f: 
     floats.extend([float(number) for number in line.split()]) 
0

Вы можете использовать:

mylist = [] 
# Assuming that you have loaded data into a lines variable. 
for line in lines: 
    mylist.append(line.strip().split('\t') 

, чтобы получить список python с только значениями полей для всех строк данных.