基于用户输入python打开文件

2024-10-01 00:23:48 发布

您现在位置:Python中文网/ 问答频道 /正文

如何根据用户输入的整数从给定文件列表中打开文件

print("Enter 1.tp.txt\n2.c17testpat.pat\n3.c432testpat.pat\n4.c499testpat.pat\n5.c1335testpat.pat\n6.c6228testpat.pat")
user = input("Enter a number")
if user == 1:
    filename = "tp.txt"
elif user == 2:
    filename = "c17testpat.pat"
elif user == 3:
    filename = "c432testpat"
elif user == 4:
    filename = "c499testpat.pat"
elif user == 5:
    filename = "c1355testpat.pat"
elif user == 6:
    filename = "c6288testpat.pat"

fp = open(filename)

在python中还有其他方法吗

这导致名称错误:未定义名称“filename”


Tags: 文件用户txt名称列表整数filenameenter
3条回答

由于这个问题表明了学习编码的强烈愿望,并且已经尝试过一些东西,所以我提供了一个适用于pythonversion3的变体(在版本2中,需要原始的输入而不是输入,以及将来的导入来声明print函数):

#! /usr/bin/env python3

import sys


names_known = (  # Hints 1 and 2
    None, "tp.txt", "c17testpat.pat", "c432test.pat",
    "c499testpat.pat", "c1355testpat.pat", "c6288testpat.pat")
options_map = dict(zip(range(len(names_known)), names_known))  # 3

print("Enter:")
for choice, name in enumerate(names_known[1:], start=1):  # 4
    print('%d.%s' % (choice, name))

user_choice = input("Enter a number")  # 5

try:  # 6
    entry_index = int(user_choice)
except:
    sys.exit("No integer given!")

if not entry_index or entry_index not in options_map:  # 7
    sys.exit("No filename matching %d" % (entry_index,))

with open(options_map[entry_index]) as f:  # 8
    # do something with f
    pass

很多事情还是会出错的,任何错误都需要用户重新启动(没有while循环等),但是有些成绩

  1. 只存储一次名称(这里我选择了一个元组)
  2. 将1作为用户界面中的第一个数字(在索引0处插入虚拟对象)
  3. 从存储名称的元组派生dict(dict提供快速查找)
  4. 从名称元组构建用户界面信息(忽略虚拟)
  5. 将输入与验证分开
  6. 首先检查域类型(整数)。如果失败,提前退出系统出口并提供信息
  7. 请检查域成员身份,否则退出并显示信息
  8. 在上下文块中打开资源文件名目标,以便在处理完成后不要忘记关闭

可能是因为您需要先将user转换为int(可能是写入的字符串)。另外,你可能应该用一个默认的情况来结束,如果用户输入了一个非敏感的值。。。在

可以将文件列表存储为Python列表,如下所示:

files = ["filename_1", "filename_2", "filename_3"]

然后要打印它们,可以使用for循环:

^{pr2}$

若要确保输入是数字,请使用while循环,该循环仅在输入为有效数字时退出:

while True:
    inp = input()
    if inp.isdigit():
        filename = files[int(inp) - 1] # - 1 because lists start from 0
        break
    else:
        print("Enter a number")

你仍然需要确保这个数字不是太大(或者是很小)。在

相关问题 更多 >