从TXT文件特定字段提取值的Python代码实现求助
解决从文件指定间隔提取单词的问题
需求场景:我需要从文件里按指定间隔提取单词。比如
thing.txt的内容是:apple juice bear box bee snake water air speed height length weight,当执行命令python program.py 4 thing.txt时,希望输出box air weight(也就是第4、8、12个单词)。我写了部分Python代码,但还没完成,求帮忙完善。
我先看看你写的代码:
import sys WordInd = sys.argv[1] WordList=[] NList=[] with open(sys.argv[2])as my_file: for line in my_file: WordList=line.split(' ',int(WordInd)) NList.append(WordList[int(WordInd)-1]) i = 0 while i<len(NList): print(NList[i]) i+=...
这里有几个小问题需要调整:
split(' ', int(WordInd))的用法不对——这个第二个参数是分割次数,不是间隔数,会导致你只能拿到每行前int(WordInd)+1个单词,后面的内容会被合并成一个元素,没法继续提取后续符合间隔的单词。- 当前逻辑只提取了每行的第
WordInd个单词,没处理"每隔N个取一个"的核心需求。 - 最后while循环的
i+=没有补全,而且逐个打印会换行,不符合预期的空格分隔输出格式。
我帮你调整后的代码如下:
import sys # 先把命令行传入的间隔数转成整数,避免重复转换 step = int(sys.argv[1]) file_path = sys.argv[2] result_words = [] with open(file_path) as my_file: for line in my_file: # 按任意空格分割所有单词,同时过滤掉空字符串(处理行首/行尾空格的情况) all_words = [word for word in line.strip().split() if word] # 从第step-1个索引开始(Python索引从0开始),每隔step取一个单词 for idx in range(step - 1, len(all_words), step): result_words.append(all_words[idx]) # 把结果用空格连接起来,一次性输出符合要求的格式 print(' '.join(result_words))
简单解释下调整的细节:
- 一开始就把命令行参数转成整数
step,让代码更简洁高效 - 用
split()(不带参数)自动处理任意数量的空格、制表符,同时过滤空字符串避免无效元素干扰 - 用
range(step-1, len(all_words), step)精准拿到所有需要的单词索引:比如step=4时,索引就是3、7、11,对应第4、8、12个单词 - 最后用
' '.join()把结果拼成空格分隔的字符串,直接输出符合预期的格式
这样运行python program.py 4 thing.txt就会得到你想要的box air weight啦。
内容的提问来源于stack exchange,提问作者DRV5




