基于用户打开文件';s输入python
如何根据用户输入的整数从给定文件列表中打开文件基于用户打开文件';s输入python,python,python-3.x,Python,Python 3.x,如何根据用户输入的整数从给定文件列表中打开文件 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 = "c17te
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”可能是因为您需要先将用户转换为
int
(可能是写入的字符串)。另外,如果用户输入了非敏感值,您可能应该使用默认情况结束,以引发错误…您可以将文件列表存储为Python列表,如下所示:
files = ["filename_1", "filename_2", "filename_3"]
然后,要打印它们,可以使用for循环:
for i, s in enumerate(files): # Use enumerate because we need to know which element it was
print(str(i + 1) + ": "+ s) # i + 1 because lists start from 0
要确保输入是一个数字,请使用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")
您仍然需要确保这个数字不是太大(或者太小)。不是python,但值得知道如何通过bash使用它。 一个简单的bash示例,列出了文件夹内容,让用户根据索引选择文件
# menu.sh
# usage: bash menu.sh FOLDER
select FILENAME in $1/*;
do
case $FILENAME in
"$QUIT")
echo "Exiting."
break
;;
*)
echo "You picked $FILENAME ($REPLY)"
chmod go-rwx "$FILENAME"
;;
esac
done
由于这个问题表明了学习编码的强烈意愿,并且已经尝试了一些东西,我提供了一个适用于python版本3的变体(在版本2中,需要原始输入而不是输入,并且需要将来的导入来声明打印函数): 许多事情仍然可能出错,任何错误都需要用户重新启动(无while循环等),但也有一些成就
您所读取的是一个字符串,它将不等于您将其与之进行比较的任何内容,因此变量
filename
将不存在。如果没有收到有效的输入,请将其转换为int并输出一些错误消息。可能会有帮助是的,我忘记键入cast控制台输入,我在没有默认大小写的情况下工作。如果用户总是输入您期望的文件名,则它将在没有默认大小写的情况下工作,但您不能相信用户会这样做。:)
#! /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