2013-10-07 4 views
1

Я пишу программу в python и хочу сравнить две строки, которые существуют в текстовом файле и разделены новым символом строки. Как я могу прочитать файл и установить каждую строку в другую переменную. i.e string1 и string2?Чтение двух строк из файла

Сейчас я использую:

file = open("text.txt").read(); 

, но это дает мне дополнительное содержание, а не только строки. Я не уверен, что он возвращает, но этот текстовый файл содержит две строки. Я пробовал использовать другие методы, такие как ..read().splitlines(), но это не дало результата, который я ищу. Я новичок в python, поэтому любая помощь будет оценена!

+2

Можете ли вы показать нам немного файла? – aIKid

+0

Являются ли строки в файле всегда в одном месте? то есть. Они всегда на линии 3 и 8? –

+0

Что-то еще следует отметить: ваш файл не содержит строк, он содержит текст. Это только один раз, когда python анализирует файл, текст становится строками. Я предполагаю, что вы хотите сказать, «есть два непостоянных набора символов» (иначе говоря). То, что было бы действительно полезно, является примером. –

ответ

2

Это только первые 2 строки, отбрасывает символ новой строки в конце и сохраняет их в 2 отдельных переменных. Он не читается во всем файле, чтобы получить первые 2 строки.

with open('text.txt') as f: 
    word1 = f.readline().strip() 
    word2 = f.readline().strip() 

print word1, word2 

# now you can compare word1 and word2 if you like 

text.txt:

foo 
bar 
asdijaiojsd 
asdiaooiasd 

Выход:

foo bar 

EDIT:, чтобы заставить его работать с любым количеством символов новой строки или пробелы:

with open('text.txt') as f: 
    # sequence of all words in all lines 
    words = (word for line in f for word in line.split()) 
    # consume the first 2 items from the words sequence 
    word1 = next(words) 
    word2 = next(words) 

Я проверил это, чтобы надежно работать с различными «нечистыми» содержимым text.txt.

Примечание: Я использую генераторные выражения, которые являются ленивыми списками, чтобы избежать чтения большего количества необходимого количества данных. Выражения генератора в остальном эквивалентны представлениям списков, за исключением того, что они производят элементы в последовательности лениво, то есть столько же, сколько и задано.

+0

они находятся в двух разных строках – siledh

+0

@siledh: извините; обновил ответ. –

+0

без проблем, мат;) – siledh

0
with open('text.txt') as f: 
    lines = [line.strip() for line in f] 
    print lines[0] == lines[1] 
+0

Может быть немного эффективнее, хотя вы читаете потенциально тысячи строк, чтобы получить первые 2. :) –

+0

@Erik Allik: хм ... всегда строки первые два? – user278064

0

Я не уверен, что он возвращается, но этот текстовый файл содержит только две строки.

Ваша проблема, скорее всего, связана с пробельными символами (наиболее часто встречающимися являются возврат каретки, строка/строка, пробел и табуляция). Поэтому, если вы попытались сравнить свои string1 с 'expectedvalue', и это не удается, это, скорее всего, из-за самой новой строки.

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

Например:

>>> print len(string1), len(expected) 
4 3 
>>> for got_character, expected_character in zip(string1, expected): 
...  print 'got "{}" ({}), but expected "{}" ({})'.format(got_character, ord(got_character), expected_character, ord(expected_character)) 
... 
got " " (32), but expected "f" (102) 
got "f" (102), but expected "o" (111) 
got "o" (111), but expected "o" (111) 

Если это ваша проблема, то вы должны strip от передней и задней пробелы, а затем выполнить сравнения:

>>> string1 = string1.strip() 
>>> string1 == expected 
True 

Если вы на unix- как, например, у вас, вероятно, есть двоичный файл xxd или od, позволяющий сбрасывать более подробное представление файла.Если вы используете окна, вы можете загрузить множество разных программ «hex editor», чтобы сделать то же самое.

+0

Печать строки 'repr()' обычно более полезна, чем 'len()', поскольку вы можете прямо увидеть, что находится в строке. –

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