1

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

现在我正在使用:

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

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

4

3 回答 3

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

编辑:使其适用于任意数量的换行符或空格:

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.

注意:我正在使用类似于惰性列表的生成器表达式,以避免读取超过所需数量的数据。生成器表达式在其他方面等价于列表推导,除了它们在序列中懒惰地生成项目,即与所要求的一样多。

于 2013-10-07T13:14:27.950 回答
0
with open('text.txt') as f:
    lines = [line.strip() for line in f]
    print lines[0] == lines[1]
于 2013-10-07T13:18:22.587 回答
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 系统,则可能有一个xxdod二进制文件可用于转储文件的更详细表示。如果您使用的是 Windows,您可以下载许多不同的“十六进制编辑器”程序来做同样的事情。

于 2013-10-07T13:30:08.117 回答