随机文件打开器有时不打开文件并崩溃

Posted

技术标签:

【中文标题】随机文件打开器有时不打开文件并崩溃【英文标题】:Random file opener does not open a file sometimes and crashes 【发布时间】:2021-03-02 00:39:50 【问题描述】:

我正在编写一个程序,它在文件中选择一个随机文件夹并打开它。但是,它大部分时间都可以工作,但是当它没有选择文件时,它会崩溃并出现以下错误(这是代码的sn-p)...

文件“C:\Users\rbloc\OneDrive\Documents\Thesis\Python Scripts\FileRO.py”,第 51 行,在 fileopener 中 mystat = os.stat(randomFile)

builtins.FileNotFoundError: [WinError 3] 系统找不到指定的路径:''

代码如下:

def fileopener(logFile, StartTime, CloseTime):

#for loop through specified directory and copy append names of files into list
for root, dirs, files in os.walk(r"Y:\Documents\Data", topdown=True):
    #time.sleep(randint(5,15))
    for file in files:
        
        file_list.append(os.path.join(root, file))

        #select random file from the file list generated
        randomFile = file_list[np.random.choice(len(file_list))]

我知道错误发生在最后一行,但我似乎无法修复它。有人有解决办法吗?

用新代码编辑:

所以我删除了导致问题的随机函数,只是让程序使用 for 循环打开文件并且效果很好。所以我把它缩小到随机函数,正如怀疑的那样,当它没有选择文件时会导致程序崩溃....

def fileopener(logFile, StartTime, CloseTime):

#for loop through specified directory and copy append names of files into list
for root, dirs, files in os.walk(r"Y:\Documents\Data", topdown=True):
    #time.sleep(randint(5,15))
    
    for file in files:
    
        randomFile = os.path.join(root, file)

        #print time stamp for operation that opened and open random file/folder selected
        print("Time OPENED ", timeopen(), " file is: ", randomFile)

【问题讨论】:

您可以在打开之前尝试打印路径。所以你至少可以检查文件是否真的存在。 @MichaelButscher 问题是,路径中有文件。我只需要它从目录中选择一个随机文件。但是它有时会选择不选择文件。它应该总是随机选择一个文件,因为目录中有文件。 您可以在循环之后移动 random.choice 以期望您的 file_list 包含所有文件并验证是否 len(filelist)> 0 因为如果它等于 0 随机选择会产生错误。 numpy.random.choice 的参数应该是您要从中选择项目的数组,而不是数字。投票结束为错字。 (无论如何,你几乎不需要numpy 来生成一个随机整数。) @tripleee 你能推荐一个替代选择随机文件功能的方法吗? 【参考方案1】:

此代码适用于我

import os
import numpy as np

def fileopener(logFile, StartTime, CloseTime):
    file_list = []
    #for loop through specified directory and copy append names of files into list
    for root, dirs, files in os.walk("Y:\Documents\Data", topdown=True):
        #time.sleep(randint(5,15))
        for file in files:
            file_list.append(os.path.join(root, file))

    #select random file from the file list generated
    randomFile = file_list[np.random.choice(len(file_list))]
    print(randomFile)

【讨论】:

以上是关于随机文件打开器有时不打开文件并崩溃的主要内容,如果未能解决你的问题,请参考以下文章

打开/关闭锐化器

Qt 文件对话框渲染不正确并崩溃

Flash CS4 随机无法打开 .fla 文件

打开文件夹后,右键选择到共享这个选项,资源管理器就未响应重启。求大神解决。我是win7旗舰版。

无法打开输出文件,权限被拒绝

Linux 上的核心转储文件:如何获取打开文件的信息?