Python可以';无法在文件存在时找到它

Python可以';无法在文件存在时找到它,python,python-2.7,arabic,persian,Python,Python 2.7,Arabic,Persian,我编写了以下程序来列出不同文件夹中上次创建文件的时间: 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 fil

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

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!")
导入操作系统、操作系统路径、时间
路径=原始输入(“备份根路径:”)
folders=os.listdir(路径)
报告列表=dict()
对于文件夹中的x:
如果os.path.isfile(路径+“\\”+x):
文件夹。删除(x)
打印
打印
打印“上次文件创建时间:”
对于文件夹中的文件夹:
对于os.walk(路径+“\\”+文件夹)中的根目录、目录和文件:
对于文件中的文件名:
如果没有,则报告\u列表。具有\u键(文件夹):
report\u list[文件夹]=time.strftime(“%Y/%m/%d”,time.gmtime(os.path.getctime(root+“\\”+文件名)))
此文件\u date=time.strftime('%Y/%m/%d',time.gmtime(os.path.getctime(root+“\\”+文件名)))
如果int(报告列表[文件夹].translate(无“/”)15}”。格式(文件夹,报告列表[文件夹])
其他:
打印“{:>15}”。格式(文件夹“空!”)
打印
打印
my_filter=原始输入(“是否要筛选输出?(y/n):”)
如果my_filter==“y”:
日期=原始输入(“输入日期(示例-->2010/10/23):”)
打印
打印
打印“过滤输出:”
对于文件夹中的文件夹:
如果报表列表具有密钥(文件夹):
如果int(报表列表[文件夹].translate(无“/”)15}”。格式(文件夹,报告列表[文件夹])
其他:
打印“{:>15}”。格式(文件夹“空!”)
嗯,它有时会返回错误。例如,当我将地址
//10.0.0.100/shares
作为输入时,我会遇到以下错误,表明文件不在那里

当文件实际存在时:


(无论如何,搜索它,意味着在我创建列表时它就在那里!)

问题显然是因为文件名使用了波斯语字符。将文件名更改为英语字符,它就可以工作了。 而且,代替

    x+"\\"+y
使用:


我用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!"))
导入操作系统、操作系统路径、时间
路径=输入(“备份根路径:”)
folders=os.listdir(路径)
报告列表=dict()
对于文件夹中的x:
如果os.path.isfile(路径+“\\”+x):
文件夹。删除(x)
打印()
打印()
打印(“上次文件创建时间:”)
对于文件夹中的文件夹:
对于os.walk(路径+“\\”+文件夹)中的根目录、目录和文件:
对于文件中的文件名:
如果不是报告列表中的文件夹:
report\u list[文件夹]=time.strftime(“%Y/%m/%d”,time.gmtime(os.path.getctime(root+“\\”+文件名)))
此文件\u date=time.strftime('%Y/%m/%d',time.gmtime(os.path.getctime(root+“\\”+文件名)))
如果int(报告列表[文件夹].replace(“/”,”)2010/10/23):”)
打印()
打印()
打印(“过滤输出:”)
对于文件夹中的文件夹:
如果报告列表中的文件夹:
如果int(报告列表[文件夹].replace(“/”,”)
在这种情况下,请尝试使用
(os.path.join(root,filename.decode('utf8'))
。通常,当您有特殊字符时,decode('utf8')可能会有所帮助。
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!"))