我正在python
编写程序,我希望比较文本文件中存在的两个字符串,并用新的行字符分隔。如何读取文件并将每个字符串设置为不同的变量。即string1
和string2
?
现在我正在使用:
file = open("text.txt").read();
但这给了我额外的内容,而不仅仅是字符串。我不知道它返回的是什么,但是这个文本文件只包含两个字符串。我尝试使用其他方法,例如..read().splitlines()
,但这并没有产生我正在寻找的结果。我是python的新手,所以任何帮助都会受到赞赏!
答案 0 :(得分: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
的各种“非干净”内容可靠地工作。
注意:我正在使用类似于惰性列表的生成器表达式,以避免读取超过所需数据量的内容。生成器表达式在其他方面等同于列表推导,除非它们在序列中懒惰地生成项目,即与请求一样多。
答案 1 :(得分:0)
with open('text.txt') as f:
lines = [line.strip() for line in f]
print lines[0] == lines[1]
答案 2 :(得分: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
二进制文件可用于转储文件的更详细表示。如果你正在使用Windows,你可以下载许多不同的“十六进制编辑器”程序来做同样的事情。