如何只读取文本文件中每行的第一个单词?
我想知道怎么才能只读取文本文件中每一行的第一个单词。我尝试了各种代码,也试着修改代码,但我只能读取整个行的内容。下面是我用的代码:
QuizList = []
with open('Quizzes.txt','r') as f:
for line in f:
QuizList.append(line)
line = QuizList[0]
for word in line.split():
print(word)
这段代码是为了从第一行中提取第一个单词。为了对每一行都重复这个过程,我会这样做:
QuizList = []
with open('Quizzes.txt','r') as f:
for line in f:
QuizList.append(line)
capacity = len(QuizList)
capacity = capacity-1
index = 0
while index!=capacity:
line = QuizList[index]
for word in line.split():
print(word)
index = index+1
6 个回答
你应该一次读取一个字符:
import string
QuizList = []
with open('Quizzes.txt','r') as f:
for line in f:
for i, c in enumerate(line):
if c not in string.letters:
print line[:i]
break
我会选择使用 str.split
这种简单的方法,但为了全面起见,这里还有一种方法,它结合了 mmap
和 re
,适合用来提取更复杂的数据:
import mmap, re
with open('quizzes.txt') as fin:
mf = mmap.mmap(fin.fileno(), 0, access=mmap.ACCESS_READ)
wordlist = re.findall('^(\w+)', mf, flags=re.M)
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用某个特定的功能时,发现它并没有按照预期的方式工作。这种情况下,通常我们会去查找相关的资料,看看有没有人遇到过类似的问题,或者有没有解决方案。
在网上,有很多开发者分享他们的经验和解决方案,像StackOverflow这样的平台就是一个很好的地方。在这里,你可以找到很多关于编程的问题和答案,甚至可以向其他人提问,寻求帮助。
总之,遇到问题时,不要慌张,先查找一下相关的信息,看看有没有人已经解决了类似的问题,这样可以节省很多时间和精力。
with Open(filename,"r") as f:
wordlist = [r.split()[0] for r in f]
根据Jon Clements的建议,我把代码改成了一行的写法,这样也更高效。
with open('Quizzes.txt', 'r') as f:
wordlist = [line.split(None, 1)[0] for line in f]
这和你的问题没什么关系,不过我想解释一下为什么用line.split(None, 1)会更高效。它只会把这一行分割一次。
关于str.split([sep[, maxsplit]])
的详细信息可以参考这个文档
如果没有指定分隔符sep或者它是None,那么会使用一种不同的分割方式:连续的空白字符会被当作一个分隔符。如果字符串的开头或结尾有空白,结果中不会包含空字符串。因此,分割一个空字符串或者只包含空白的字符串时,使用None作为分隔符会返回一个空列表[]。
比如说,' 1 2 3 '.split()
会返回['1', '2', '3']
而
' 1 2 3 '.split(None, 1)
会返回['1', '2 3 ']
。
你在错误的地方使用了 split
方法,试试这样:
for line in f:
QuizList.append(line.split(None, 1)[0]) # add only first word