如何根据用户输入的整数从给定文件列表中打开文件
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
中完成导致NameError:name' filename'未定义
答案 0 :(得分:3)
您可以将文件列表存储为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")
你仍然需要确保这个数字不是太大(或者说很小)。
答案 1 :(得分:1)
可能是因为您需要先将用户转换为int
(可能是写入的字符串)。此外,如果用户输入非敏感值,您应该使用默认情况完成抛出错误...
答案 2 :(得分:0)
不是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
信用http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_06.html
答案 3 :(得分:0)
由于问题表明了学习编码的强烈意愿并且已经尝试了一些东西,我提供了一个适用于python版本3的变体(在版本2中,需要raw_input而不是输入,以及将来导入以声明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
很多事情仍然可能出错,任何错误都需要用户重启(没有循环等),但有些成就