Python 从文件中读取两个字符串

Python 从文件中读取两个字符串,python,file-io,Python,File Io,我正在用python编写一个程序,我想比较文本文件中存在的两个由新行字符分隔的字符串。如何在中读取文件并将每个字符串设置为不同的变量。i、 estring1和string2 现在我正在使用: file = open("text.txt").read(); 但这给了我额外的内容,而不仅仅是字符串。我不确定它返回了什么,但是这个文本文件只包含两个字符串。我尝试使用其他方法,如.read().splitlines(),但这并没有产生我想要的结果。我是python新手,因此任何帮助都将不胜感激 这只读

我正在用
python
编写一个程序,我想比较文本文件中存在的两个由新行字符分隔的字符串。如何在中读取文件并将每个字符串设置为不同的变量。i、 e
string1
string2

现在我正在使用:

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

但这给了我额外的内容,而不仅仅是字符串。我不确定它返回了什么,但是这个文本文件只包含两个字符串。我尝试使用其他方法,如
.read().splitlines()
,但这并没有产生我想要的结果。我是python新手,因此任何帮助都将不胜感激

这只读取前两行,去掉末尾的换行符,并将它们存储在两个单独的变量中。它不会读取整个文件,而只是获取其中的前两个字符串

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
输出:

foo
bar
asdijaiojsd
asdiaooiasd
foo bar
编辑:要使其适用于任意数量的换行符或空白:

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
的各种“非干净”内容

注意:我使用的生成器表达式类似于惰性列表,以避免读取超过所需数量的数据。生成器表达式在其他方面等同于列表理解,除非它们在序列中缓慢地生成项,即与所请求的一样多

with open('text.txt') as f:
    lines = [line.strip() for line in f]
    print lines[0] == lines[1]
我不确定它返回了什么,但是这个文本文件只包含两个字符串

您的问题可能与空白字符有关(最常见的是回车符、换行符/换行符、空格和制表符)。因此,如果您试图将
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)
如果这是您的问题,那么您应该
去掉前导和尾随空白,然后执行比较:

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

如果您使用的是类unix系统,则可能会有一个
xxd
od
二进制文件来转储文件的更详细表示。如果您使用的是windows,您可以下载许多不同的“十六进制编辑器”程序来执行相同的操作。

它们位于两个不同的行中。这非常有效,但是我注意到,当我有多个新行字符或一个空格时,它会失败。有没有一种方法可以使任何类型的空格分隔符都可以使用(对不起,我知道我在问题中只说了一个)@rsay3:是的,我已经修改了答案。你可以在你的表周围放一个
岛,而不是使用
下一个
,例如,要获取前两行:
word1,word2=islice(f,2)
@JonClements:…或者只是
word1,word2=next(words),next(words)
。但我不认为
islice
增加的极客特质会为初学者带来额外的导入和学习开销(或者即使是有经验的Pythonista也会有轻微的可读性开销)。你能给我们看一下这个文件吗?文件中的行是否总是在同一个位置?它们总是在第3行和第8行?还有一点需要注意:您的文件不包含字符串,它包含文本。只有python解析文件后,文本才会变成字符串。我想你的意思是,“有两个无空格的字符集”(又名单词)。真正有帮助的是一个例子。可能会更有效一些,尽管您正在读取可能数千个字符串,只是为了得到前2个。:)@埃里克:嗯。。。字符串总是前两个吗?打印一行的
repr()
通常比
len()
更有用,因为您可以直接看到字符串中的内容。