遍历单词列表,检查是否有以Python中给定字符串开头的单词

遍历单词列表,检查是否有以Python中给定字符串开头的单词,python,string,list,loops,Python,String,List,Loops,我最近开始学习Python,到目前为止,一切似乎都相当直观 我有一个文本文件,上面有几行数据。我遍历每一行,将其拆分为单词,现在我想遍历给定行上的每个单词,检查它是否以给定字符串开头,如果是,则将单词更改为其他单词 到目前为止,我已经: with open('test_inputfile.txt','r') as f: for line in f: words = line.split('","') for word in words: if word.start

我最近开始学习Python,到目前为止,一切似乎都相当直观

我有一个文本文件,上面有几行数据。我遍历每一行,将其拆分为单词,现在我想遍历给定行上的每个单词,检查它是否以给定字符串开头,如果是,则将单词更改为其他单词

到目前为止,我已经:

with open('test_inputfile.txt','r') as f:
for line in f:
    words = line.split('","')
    for word in words:
        if word.startswith('spam'):
            # change given word
但这不起作用,因为我似乎无法访问
word
.startswith()
函数

我相信这一定很容易做到,因为到目前为止,其他一切都非常简单

谢谢。

你可以试试这个:

f = open('test_inputfile.txt').readlines()
f = [i.strip('\n').split(',') for i in f]
for line in f:
    for word in line:
       if word.startswith('spam'):

现在,f存储一个列表,其中包含每行中的所有单词

如果您使用的是CSV数据,这可能会很有用。如果是这种情况,请将拆分更改为
line.split(',')
。否则,请参见下文

使用
startswith
功能时,实际上不需要拆分行,因为您只关心行的开头。有关
startswith
功能的更多信息,请参阅

打开('test_inputfile.txt','r')作为f的
:
对于f中的行:
如果行.startswith('spam',0,4):
#采取行动

这可以有效地检查单词“spam”是否位于0到4的位置


祝你一切顺利:)

你可能忘了在每一行中去掉开头/结尾的双引号。但我强烈建议使用该模块处理csv数据:

import csv
with open('test_inputfile.txt','r') as f: 
  reader = csv.reader(f, delimiter=',', quotechar='"') 
  # both params are the default values anyway 
  for row in reader:
    for word in row:
      if word.startswith('spam'):
        # do stuff

您有这样一个文件:

"toast","eggs","bacon" 
"orangejuice","spamandtoast","bagels"
读取文件:

with open("test_inputfile.txt", "r") as fs:
    for lines in fs:
        line = lines.split(",")
        for word in line:
            word = word.replace('"','') # removes the quotes
            if word.startswith("spam"):
                print word
您还可以在开头创建一个空列表
wordlist=[]
,并将每个单词添加到列表中

wordlist.append(word)


更好地使用模块。

您可能有一个空的iterable,因为您应该在
,“
而不是
”,“
@MosesKoledoye不是空的,但只有一个元素:整个
@MosesKoledoye文本文件在单词之间有逗号和双撇号。您可能有一行类似
“spam”,“second”,“第三个”
在本例中使用
,“
(引号和逗号)作为分隔符将在第一个、中间和最后一个元素之间产生不同的行为。如果将引号作为文本的一部分,只需使用逗号作为分隔符并查找
”垃圾邮件
而不是
spam
在你的
startswith
方法中,你能发布输入文件的一部分吗?也许我不清楚,我想检查是否每个单词都以“spam”开头,而不是每行。谢谢你的帮助!谢谢你的回答,但是,我遇到了与我的原始代码相同的问题:我不能使用word的.startswith()函数。这与我的代码基本相同,但我不能使用“words.startswith()”。请发布一些输入文本。它看起来像:
“toast”、“egs”、“bacon”、“orangejuice”、“spamandtoast”、“bagels”
(其中
orangejuice
开始一个新行)我想找到
spamandtoast
,然后,例如,将其更改为
酸奶