【问题标题】:Python can't find a file while it existPython在存在时找不到文件
【发布时间】:2015-11-16 05:50:47
【问题描述】:

我编写了以下程序来列出不同文件夹中的最后文件创建时间:

import os, os.path, time

path = raw_input("BackUp root Path: ")
folders = os.listdir(path)
report_list = dict()

for x in folders:
    if os.path.isfile(path+"\\"+x):
        folders.remove(x)

print
print
print "Last file creation time:"
for folder in folders:
    for root,dirs,files in os.walk(path+"\\"+folder):
        for filename in files:
            if not report_list.has_key(folder):
                report_list[folder]=time.strftime('%Y/%m/%d', time.gmtime(os.path.getctime(root+"\\"+filename)))
            this_file_date = time.strftime('%Y/%m/%d', time.gmtime(os.path.getctime(root+"\\"+filename)))
            if int(report_list[folder].translate(None,"/"))< int(this_file_date.translate(None,"/")):
                report_list[folder]= this_file_date

for folder in folders:
    if report_list.has_key(folder):
        print  "    {:<25}--->{:>15}".format(folder,report_list[folder])
    else:
        print  "    {:<25}--->{:>15}".format(folder,"Empty!")
print
print


my_filter = raw_input("Do you want to filter output? (y/n): ")
if my_filter== 'y':
    date=raw_input("Enter date(Example --> 2010/10/23): ")
    print
    print
    print "Filtered output:"
    for folder in folders:
        if report_list.has_key(folder):
            if int(report_list[folder].translate(None,"/"))< int(date.translate(None,"/")):
                print  "    {:<25}--->{:>15}".format(folder,report_list[folder])
        else:
            print  "    {:<25}--->{:>15}".format(folder,"Empty!")

嗯,它有时会返回错误。例如,当我将地址 //10.0.0.100/shares 作为输入时,我遇到以下错误,表明文件不存在!

虽然文件确实存在:

(总之在搜索它,意味着当我创建列表时它就在那里!)

【问题讨论】:

    标签: python python-2.7 arabic persian


    【解决方案1】:

    我用 Python 3.5 重写了程序,现在它运行良好,没有任何错误:

    import os, os.path, time
    
    path = input("BackUp root Path: ")
    folders = os.listdir(path)
    report_list = dict()
    
    for x in folders:
        if os.path.isfile(path+"\\"+x):
            folders.remove(x)
    
    print ()
    print ()
    print ("Last file creation time:")
    for folder in folders:
        for root,dirs,files in os.walk(path+"\\"+folder):
            for filename in files:
                if not folder in report_list:
                    report_list[folder]=time.strftime('%Y/%m/%d', time.gmtime(os.path.getctime(root+"\\"+filename)))
                this_file_date = time.strftime('%Y/%m/%d', time.gmtime(os.path.getctime(root+"\\"+filename)))
                if int(report_list[folder].replace("/",""))< int(this_file_date.replace("/","")):
                    report_list[folder]= this_file_date
    
        if folder in report_list:
            print("    {:<25}{:>15}".format(folder,report_list[folder]))
        else:
            print("    {:<25}{:>15}".format(folder,"Empty!"))
    
    print
    print
    
    
    my_filter = input("Do you want to filter output? (y/n): ")
    if my_filter== 'y':
        date=input("Enter date(Example --> 2010/10/23): ")
        print ()
        print ()
        print ("Filtered output:")
        for folder in folders:
            if folder in report_list:
                if int(report_list[folder].replace("/",""))< int(date.replace("/","")):
                    print("    {:<25}{:>15}".format(folder,report_list[folder]))
            else:
                print("    {:<25}{:>15}".format(folder,"Empty!"))
    

    【讨论】:

      【解决方案2】:

      问题显然是因为文件名使用了波斯字符。将您的文件名更改为英文字符,它可以工作。 另外,而不是

          x+"\\"+y
      

      用途:

          os.path.join(x,y)
      

      【讨论】:

      • 在这种情况下,请尝试使用(os.path.join(root,filename.decode('utf8'))。一般来说,只要你有特殊字符,decode('utf8') 可能会有所帮助。
      猜你喜欢
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 2015-12-15
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      相关资源
      最近更新 更多