搜索文件中的特定子字符串

时间:2017-07-28 11:42:39

标签: python python-3.x file

这个问题可能是重复的,但我发现任何答案似乎都没有效果。我有一个.txt文件,里面装满了这个布局:

艺术家 - 歌曲,www.link.com

artist2 - song2,www.link2.com

这是我的一般目的:

uinput = input("input here: ")

save = open("save.txt", "w+")
ncount = save.count("\n")

for i in range(0, ncount):
    t = save.readline()
    if uinput in t:
        print("Your string " uinput, " was found in" end = "")        
        print(t)

我的意图是:如果在一行中找到了userinput字,则打印整行或链接。

3 个答案:

答案 0 :(得分:4)

  1. 您想要读取文件,但是您正在以写入模式打开文件。您应该使用r,而不是w+

  2. 迭代文件的最简单方法是在文件对象上直接迭代for循环

  3. 不是错误,而是挑剔。你没有关闭你的文件。您可以使用with.. as上下文管理器

  4. 解决此问题
    uinput = input("input here: ")
    
    with open("save.txt", "r") as f:
        for line in f:
            if uinput in line:
                print('Match found')
    

答案 1 :(得分:1)

您可以使用list-comprehension读取文件并仅获取包含该单词的行,例如:

with open('save.txt', 'r') as f:
    uinput = input("input here: ")
    found = [line.rstrip() for line in f if uinput.lower() in line.lower()]
    if found:
        print('Found in these lines: ')
        print('\n'.join(found))
    else:
        print('Not found.')

如果您只想打印链接,可以使用:

found = [line.rstrip().split(',')[1] for line in f if uinput.lower() in line.lower()]

答案 2 :(得分:0)

您可以使用列表推导来获取包含用户输入词的行。 使用下面的代码:

try:
    f = open("file/toyourpath/filename.txt", "r") 
    data_input = raw_input("Enter your listed song from file :");
    print data_input
    fetch_line = [line for line in f if data_input in line]
    print fetch_line
    f.close()
except ValueError, e:
    print e