我有一个文本文件只是说
text1 text2 text text
text text text text
我期待首先计算文件中的字符串数(全部由空格分隔),然后输出前两个文本。 (文本1文本2)
有什么想法吗?
提前感谢您的帮助
编辑:这是我到目前为止所做的:
>>> f=open('test.txt')
>>> for line in f:
print line
text1 text2 text text text text hello
>>> words=line.split()
>>> words
['\xef\xbb\xbftext1', 'text2', 'text', 'text', 'text', 'text', 'hello']
>>> len(words)
7
if len(words) > 2:
print "there are more than 2 words"
我遇到的第一个问题是,我的文本文件是:text1 text2 text text text
但是当我拉出单词的输出时,我得到: ['\ xef \ xbb \ xbftext1','text2','text','text','text','text','hello']
'\ xef \ xbb \ xbf来自哪里?
答案 0 :(得分:16)
要逐行读取文件,只需在for
循环中循环打开文件对象:
for line in open(filename):
# do something with line
要按空格将一行划分为单独的单词列表,请使用str.split()
:
words = line.split()
要计算python列表中的项目数,请使用len(yourlist)
:
count = len(words)
要从python列表中选择前两项,请使用切片:
firsttwo = words[:2]
我会给你构建完整的程序,但你不需要比上面更多的内容,加上一个if
语句来判断你是否已经有了这两个词。
您在文件开头看到的三个额外字节是UTF-8 BOM(字节顺序标记);它将您的文件标记为UTF-8编码,但它是多余的,仅在Windows上使用。
您可以使用以下命令将其删除:
import codecs
if line.startswith(codecs.BOM_UTF8):
line = line[3:]
您可能希望使用该编码将字符串解码为unicode:
line = line.decode('utf-8')
您也可以使用codecs.open()
打开文件:
file = codecs.open(filename, encoding='utf-8')
请注意,codecs.open()
将不为您剥离BOM;最简单的方法是使用.lstrip()
:
import codecs
BOM = codecs.BOM_UTF8.decode('utf8')
with codecs.open(filename, encoding='utf-8') as f:
for line in f:
line = line.lstrip(BOM)