检查输入python,以便我可以关闭文件?

时间:2015-05-20 09:32:37

标签: python

file=open('ClassA1.txt','a')
file=open('ClassB1.txt','a')
file=open('ClassC1.txt','a')
 print('hello welcome to maths 2000')
 Class=input('please enter your class '+"\n")
 name=input('please enter your name '+"\n")
 if Class==(int(input"A1")):
    file.close('ClassB1')
    file.close('ClassC1')
    file.write(name+"/n")
   file.close 

如何检查用户输入以便关闭文件?

4 个答案:

答案 0 :(得分:0)

fd = open("Student_info.txt", "a+")

class_info = []

print "Hello, welcome to maths 2000"
class_to_be = raw_input("Please enter your class: ")
name = raw_input("Please enter your name: ")

student = name + " " + class_to_be
class_info.append(student)

print class_info

for students in class_info:
    fd.write("%s" %(students))
    fd.close()

结果:

jester112358@ubuntu:~$ python stackhelp.py
Hello, welcome to maths 2000
Please enter your class: Python-class
Please enter your name: Greenie245
['Greenie245 Python-class']

并将您的列表内容写入Student_info.txt

我认为将所有信息放在一个文件中会更好,但显然如果你愿意,你可以为每个班级都有一个文件。

如果您希望每个文件都有课程,请考虑使用:

for students in class_info:
spl = students.split()
if spl[1] == "A1":
    A1=open('ClassA1.txt','a')
    A1.write("%s" %(students))
    A1.write("\n")
    A1.close()
elif ... # add anothor classes here

答案 1 :(得分:0)

你做得很长,你可以在用户给出答案后打开文件。

import os

print('hello welcome to maths 2000')
yourClass=input('please enter your class '+"\n")
filename = 'Class{}.txt'.format(yourClass)
name=input('please enter your name '+"\n")
if os.path.exists(filename):
    f = open(filename, 'a')
    file.write(name+"/n")
    file.close()
else:
    print ("Class not found")

我只是设置它以便输入确定它尝试打开的文件名,如果该文件存在,则打开它并附加其名称。

答案 2 :(得分:0)

执行这些

file=open('ClassA1.txt','a')
file=open('ClassB1.txt','a')
file=open('ClassC1.txt','a')

文件变量包含“ClassC1.txt”,您将一次又一次地重新分配对象。  所以无论如何检查你是否执行了这个:

file.close()

最后一个文件将被关闭。  相反,我建议您首先输入要打开的文件,然后打开该文件。

file_name = input("Enter file name")
file = open(file_name, 'a')
#do your work
file.close()

答案 3 :(得分:0)

好的第一点:

这一行:

file=open('ClassA1.txt','a')

打开文件'ClassA1.txt'进行追加,将file对象分配给名称file(最终隐藏内置类型file,但这里不相关)

然后是第二行:

file=open('ClassB1.txt','a')

打开文件'ClassB1.txt'进行追加,将file对象分配给名称file,将绑定替换为先前打开的文件“ClassA1.txt”。由于没有其他名称引用此先前打开的文件,因此它丢失了。在最好的情况下,当对象被垃圾收集时,底层文件指针将被关闭(CPython)但是这不是由语言规范保证的,而另一个实现可能无法正确释放文件指针。 / p>

在所有情况下,此时您都无法再访问“ClassA1.txt”。

现在第三行:

file=open('ClassC1.txt','a')

执行相同的操作 - 将名称file重新分配给新文件对象等。

此时,您可能必须打开,可能没有,并且在两种情况下都无法访问(可能已经是垃圾收集)文件对象,名称file指向第三个 - 这意味着任何写入操作file将写入文件“ClassC1.txt”。

如果要保持打开所有三个文件,则必须通过将每个文件绑定到不同的名称来保持对它们的引用,即:

file1=open('ClassA1.txt','a')
file2=open('ClassB1.txt','a')
file3=open('ClassC1.txt','a')

或将它们存储在列表中:

files = []
files.append(open('ClassA1.txt','a'))
files.append(open('ClassB1.txt','a'))
files.append(open('ClassC1.txt','a'))

所以您现在可以通过索引访问它们,即files[0]files[1]files[2]

或在词典中:

files = {}
files["A1"] = open('ClassA1.txt','a')
files["B1"] = open('ClassB1.txt','a')
files["C1"] = open('ClassC1.txt','a')

因此您现在可以通过密钥访问它们,即files["A1"]files["A2"]files["A3"]

但是:你为什么

  1. 打开三个文件,
  2. 询问用户要写入哪个文件,
  3. 关闭其他两个文件,
  4. 写入所选文件
  5. 关闭它
  6. 当你可以更简单地说:

    1. 询问用户要写入哪个文件,
    2. 打开它
    3. 写信给她
    4. 关闭它
    5. 由于您的文件以类名命名,因此您可以轻松地从类名构建文件名:

      cls = input("please enter your class\n")
      filename = "Class{}.txt".format(cls)
      f = open(filename, "a")
      f.write("whatever")
      f.close() 
      

      或甚至更安全(这将确保无论发生什么情况都将关闭文件):

      cls = input("please enter your class\n")
      filename = "Class{}.txt".format(cls)
      with open(filename, "a") as f:
         f.write("whatever")
      

      请注意,在这种情况下,您无需致电f.close()

      其他几点:

      Class=input('please enter your class '+"\n")
      

      => 'cls'或'class_',而不是'Class' - 按照惯例,大写名称是用于类(在OO含义中)的名称。

      => Python不是PHP:'please enter your class \n'只是工作

      if Class==(int(input"A1"))
      

      我不知道你期望这条线做什么,但它肯定看起来你也不知道......有一件事是肯定的:一个字符串不会等于一个整数。从未...

      file.close('ClassB1')
      

      您是否阅读过文档?就在这里(好吧,至少是首发):https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files

      file.close 
      

      你想要file.close()。 parens不是可选的 - 如果你想至少调用这个方法。