Python从文件提取数据赋值变量故障:Username与Password无法正常输出
问题
尝试使用Python从file2.txt提取数据并赋值给对应变量,编写代码后运行结果不符合预期:Username和Password的值无法显示,仅输出空白行。
编写的代码
import re username = "" password = "" full_name = "" birth_date = "" phone_number = "" address = "" with open("file2.txt", "r") as f: contents = f.read() lines = contents.split("\n") for line in lines: if ": " in line: key, value = re.split(":\s*", line) if key == "Username": username = value elif key == "Password": password = value elif key == "Nama Lengkap": full_name = value elif key == "Tanggal Lahir": birth_date = value elif key == "Nomor HP": phone_number = value elif key == "Alamat": address = value print(username) print(password) print(full_name) print(birth_date) print(phone_number) print(address)
当前运行输出
kjdaskd 10-20-1000 +218112301231 dsajh Press any key to continue . . .
file2.txt内容
Username : dsadj Password : 12345 Nama Lengkap: kjdaskd Tanggal Lahir: 10-20-1000 Nomor HP: +218112301231 Alamat: dsajh
期望输出
dsadj 12345 kjdaskd 10-20-1000 +218112301231 dsajh Press any key to continue . . .
解决方案
问题原因
- 代码中
if ": " in line:的判断会遗漏冒号后无空格的行,同时处理Username : dsadj这类行时,re.split(":\s*", line)拆分出的key是"Username "(末尾带空格),与判断条件中的"Username"(无空格)不匹配,导致赋值失败。 - 未限制拆分次数,若值中包含冒号会被错误拆分。
修改后的代码
import re username = "" password = "" full_name = "" birth_date = "" phone_number = "" address = "" with open("file2.txt", "r") as f: contents = f.read() lines = contents.split("\n") for line in lines: # 处理所有包含冒号的非空行 if ":" in line and line.strip(): # 限制拆分次数为1,避免值内冒号干扰 key_part, value = re.split(":\s*", line, maxsplit=1) # 去除key前后空白字符,匹配判断条件 key = key_part.strip() if key == "Username": username = value elif key == "Password": password = value elif key == "Nama Lengkap": full_name = value elif key == "Tanggal Lahir": birth_date = value elif key == "Nomor HP": phone_number = value elif key == "Alamat": address = value print(username) print(password) print(full_name) print(birth_date) print(phone_number) print(address)
修改说明
- 替换判断条件为
if ":" in line and line.strip():确保处理所有含冒号的有效行,不受冒号后空格影响。 re.split添加maxsplit=1:防止值中包含冒号时被错误拆分。- 对
key_part执行strip():去除key前后空白,解决Username : dsadj拆分后key带空格的匹配问题。
内容的提问来源于stack exchange,提问作者user512512af
相关产品推荐
相关产品推荐

