gpt4 book ai didi

python - 从python调用时Grep不断返回0

转载 作者:行者123 更新时间:2023-11-28 19:04:55 24 4
gpt4 key购买 nike

背景:我有很多音乐。我也倾向于一遍又一遍地听同一张专辑。最终,这让我很恼火,以至于我决定每天听不同的。鉴于我的收藏中只有 100 多张专辑,而且我懂一点编程,我想我会写一个脚本来帮助自己。

现在,请记住,我是一个知道自己知之甚少的学生。我所知道的大部分内容都来自一本 Python 书籍(虽然对于初学者来说是一本不错的书)和 Python 文档。

此外,我正在运行 Python 3.6 并使用 Cygwin,所以我确实有可用的 *nix 命令。

问题在于以下方法(编辑 9:43 EST - 建议添加“if line in file”实现;新行已加星标):

def choose_album(library_file, day_file):
albums = []
for line in fileinput.input(library_file):
albums.append(line)
fileinput.close() #**
check_file = io.open(day_file) #**
album_chosen = False #**
while album_chosen == False:
choice = random.randrange(0, len(albums))
print("Searching for " + albums[choice] + ".")
for line in check_file: #**
if albums[choice] in line: #**
break #**
if albums[choice] not in check_file: #**
album_chosen = True #**
print(albums[choice])
return albums[choice]

其中 library_file 是一个文本文件,其中包含我在 Spotify 上购买或收听的所有专辑,day_file 是我的“当天专辑”文件,每一行包含日期和当天的专辑。while循环曾经是一个

if albums[choice] in line:
break

然后脚本会继续将其写入 day_file。它工作正常,但问题是 if albums[choice] in line 行有时会返回假阴性,给我一张我已经听过的专辑,这意味着我必须回去进入我的文件,删除多余的相册,然后再次运行脚本。

更新(美国东部标准时间 9:43)根据我对已编辑代码的测试运行,这至少不会吐出大量文本。是否可能再次给我重复项?

更新(美国东部标准时间 12:02)- 删除了因建议而变得无关紧要的输出。

最佳答案

你正在阅读没有修剪最后换行符的行:

for line in fileinput.input(library_file):
albums.append(line) ##### BUG

您可能写的内容可能是

    albums.append(line.rstrip('\n'))

换行符导致 grep 打印出每一行。令我有些惊讶的是,作为活跃的 Unix 用户超过 25 年之后,我发现至少某些版本的 grep 会导致

 grep 'String which ends with newline
' filename

打印出 filename 中的每一行,显然是因为它认为这等同于

grep -e 'String which ends with newline' -e '' filename`

显然,作为正则表达式的空字符串匹配所有可能的输入。

grep 切换到 if albums[choice] in line 消除了这个症状,实际上恰好起作用了,因为你也没有从你从other 文件,您专门查找行尾的匹配项;所以 "foo\n"in "datestamp foo\n" 实际上返回 True。但是,这似乎与您的预期相反(例如,您正在打印字符串后跟一个句号,它位于嵌入的换行符之后,在输出中单独一行)所以也许这仍然是一个(次要的)代码中的错误。

关于python - 从python调用时Grep不断返回0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48151660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com