如何从.txt文件中获取某个单词给定它的开头和结尾

问题描述 投票:1回答:4

免责声明:

我正在使用python 3!

基本代码:

所以我有这个代码:

def login(userlogin):

    with open('usernames.txt') as input_data: # Grabs username from usernames.txt CHANGE DOESN'T WORK FOR MULTIPLE PEOPLE
        for user in input_data:
            if user.strip() == userlogin:
                break

        for user in input_data:
            if user.strip() == '0':
                break

    print(user)

while(True):
    userinput = input('')
    login(userinput)

以及.txt文件在同一目录中,名为usernames.txt,您可以在此处看到:

admin010
guest020
admin01030
user040

欲望:

我希望代码根据输入的名称输出.txt文件中对应的用户名,例如,如果您输入'admin',它将在文本文档中找到以admin开头的文本,并找到其结尾始终为'0'和输出admin010。但是,我希望它确保,当您键入admin01时,它将输出admin01030。所以用户名的形式为name + value(2位数,即7的值为07)+ a zero'0' string)。

问题:

代码无效,无论我的输入是什么,它总是输出.txt文档中的最后一个单词。我不知道为什么,任何帮助都会很棒。

python file parsing text tkinter
4个回答
0
投票

如果我了解你,可以用这种方式写得相当紧凑。

def login(userlogin):
    with open('usernames.txt') as usernames:
        for line in usernames:
            username = line.strip()
            if username.startswith(userlogin+'0') and len(username)==len(userlogin)+3:
                print (username)
                return
    print ('no match')

for poss in ['admin', 'admin01', 'guest', 'user']:
    print (poss, ': ', end=''); login(poss)

输出:

admin : admin010
admin01 : admin01030
guest : guest020
user : user040

1
投票

如果格式为“name + two-digits + 0”,那么您希望将名称与少于最后三个字符的行匹配:

for user in input_data:
    if userlogin == user.rstrip()[:-3] # strip trailing whitespace and remove last 3 chars
        print(user)

0
投票

嗨,请看下面的代码。但我需要知道为什么admin01只匹配admin01030?因为admin010也以admin01开头

def login(userlogin):
    with open(
            'usernames.txt') as input_data:  # Grabs username from usernames.txt CHANGE DOESN'T WORK FOR MULTIPLE PEOPLE
        for user in input_data:
            if user.strip() == '0':
                break
            if user.strip().startswith(userlogin, 0, len(userlogin)):
                break
    print(user)


while True:
    userinput = input('')
    login(userinput)

0
投票

你想要做的是基本上检查字符串是否有子字符串。

在下面的示例中,当按下按钮时,它会检查位于同一目录中的文件'usernames.txt'是否具有与用户输入完全匹配的字符串,然后到达为valuezero保留的最后3个字母。然后将其解析为namevalue'0'

import tkinter as tk

def login():
    with open('usernames.txt') as fin:
        users_list = fin.readlines()

    for user in users_list:
        user = user.strip()             # to lose \n
        if user[:-3] == query.get():
            nam_lbl['text'] = user[:-3]
            val_lbl['text'] = user[-3:-1]
            zero_lbl['text'] = user[-1]

root = tk.Tk()

query = tk.Entry(root)
nam_lbl = tk.Label(root, text="Name: ")
val_lbl = tk.Label(root, text="Value: ")
zero_lbl = tk.Label(root, text="Zero: ")

tk.Button(root, text="Login", command=login).pack()

# layout
query.pack()
nam_lbl.pack()
val_lbl.pack()
zero_lbl.pack()

root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.