Python - 文件I / O.

时间:2018-03-07 16:15:10

标签: python python-3.x file-io

我对这个Python“文件”的东西很新。这是从名为“CabDetails.txt”的文件中检索数据的代码,该文件包含一些表格数据,例如租车的可用性及其ID。我能够运行程序没有错误,但我没有得到任何输出。哦顺便说一句,输入是由用户给出的。我觉得我在for循环中搞砸了,或者我只是弄乱了整个事情。非常感谢您的帮助。谢谢。 (NOOB SPOTTED,请多余和帮助:P)。

try:
    Details=input("enter details of cab you are looking for:")
    for line in Details:
        open('CabDetails.txt','r').readlines()
    if Details in line:
        print (line)
except IOError:
    print("Error:can\'t find file or read data")

2 个答案:

答案 0 :(得分:0)

您的代码有一些错误。首先,你循环输入的每个字符,第二个是你没有读取文件,你没有分配给变量,第三个是if语句上的坏缩进。

try:
    details=input("enter details of cab you are looking for:")
    for line in open('CabDetails.txt','r').readlines():
        if details in line:
            print (line)
except IOError:
    print("Error:can\'t find file or read data")

这样的事情应该有效。

答案 1 :(得分:0)

您的代码有两个主要问题:

1)您打开文件并阅读每个"行"的所有行。你在Details找到,但我想你想要做的是阅读文件的所有行,然后搜索包含Details中每个元素的行。你甚至没有关闭你打开的文件

2)您实际上是在Details中搜索每个元素,但是,如果Details是一个字符串,那么您实际上正在遍历每个字母。 例如,如果Details = "det1,DET2,Det3"您将搜索包含每个字母的所有行

为了解决您的第一个问题,我们将阅读您文件的所有行并将其存储在名为MyFileRows的列表中:

with open('CabDetails.txt','r') as f:
    MyFileRows = f.readlines()

通过这种方式,with语句会自动关闭您的文件,并且您有列表。

对于您的第二个问题,首先您需要将逗号出现的Details分开(假设您的输入类似于det1, det2, det3)并将此值存储在名为MyDetails的列表中:

MyDetails = Details.strip().split(',') # this variable will look like: ['det1', 'det2', 'det3']

最后你检查哪些行至少包含你的一个细节:

for line in MyFileRows:
    if any([detail in line for detail in MyDetails]):
        print line

注意:在第二行,我们在这里使用list comprehension

您的最终代码应如下所示:

try:
    with open('CabDetails.txt','r') as f:
         MyFileRows = f.readlines()
except IOError:
    print("Error:can\'t find file or read data")

Details=input("enter details of cab you are looking for:")
MyDetails = Details.strip().split(',')

for line in MyFileRows:
    if any([detail in line for detail in MyDetails]):
        print line