“[Errno 2]没有此类文件或目录”问题

2024-09-19 23:38:40 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我的教授给了我这个代码作为我家庭作业的解决方案,但是当我运行它时,它给了我一个错误。你能帮帮我吗?我想我没有指定文件的位置,但不确定是否是这样。这个问题的目的是生成和读取包含随机数列表的文件。

import random
import os
import time


def fillFile(fileSize, fileName):

    # Delete file if exists
    if os.path.exists(fileName):
        os.remove(fileName)
    # Open file
    FILE = open(fileName, "w")

    # Write to file
    for i in range(fileSize):
        r = random.randint(0,fileSize+1000)
        FILE.write(str(r) + "\n")
    FILE.close()


def readFile(fileName):
    # Open file
    if os.path.exists(fileName):
        FILE = open(fileName,"r")
    else:
        print(fileName + " does not exist!")
        exit()

    # Read File
    alist = []
    for line in FILE:
        alist.append(int(line))

    FILE.close()

    return alist


def mainForFiles():
    # Dosyaları oluştur
    fileSizes = [1000, 5000, 10000, 25000, 50000, 100000, 200000]
    dirName = ".\\filesForAssignment1\\"

    # Delete fileStats.txt file if exists
    statFileName = "fileStats.txt"
    if os.path.exists(statFileName):
        os.remove(statFileName)

    # open stat file
    statFile = open(statFileName, "w")
    statFile.write("fillFile")

    print("WRITING TO FILES")

    for i in fileSizes:
        start = time.time()
        fillFile(i, dirName+"file"+str(i))
        finish = time.time()

        statFile.write("  " + str(finish-start))
        print("File Size = " + str(i) + "   Write Time = " + str(finish-start))

    statFile.write("\n")

    print("READING FILES")
    statFile.write("readFile")

    for i in fileSizes:

        fileName = dirName+"file"+str(i)

        # Dosyayı oku
        finish = time.time()
        alist = readFile(fileName)
        start = time.time()

        statFile.write("  " + str(finish-start))
        print ("File Size = " + str(i)+ "   Dosya Okuma Zamanı = " + str(finish-start))

    statFile.write("\n")
    statFile.close()


mainForFiles()
  File "C:/Users/emrea/PycharmProjects/helloworld/hello2.py", line 84, in 
<module>
    mainForFiles()
  File "C:/Users/emrea/PycharmProjects/helloworld/hello2.py", line 57, in mainForFiles
    fillFile(i, dirName+"file"+str(i))
  File "C:/Users/emrea/PycharmProjects/helloworld/hello2.py", line 12, in fillFile
    FILE = open(fileName, "w")
FileNotFoundError: [Errno 2] No such file or directory: '.\\filesForAssignment1\\file1000'

Tags: iniftimeosexistsfilenamestartfile
2条回答

exit()没有做您想做的事情,它继续执行代码


def readFile(fileName):
    # Open file
    if os.path.exists(fileName):
        FILE = open(fileName,"r")
    else:
        print(fileName + " does not exist!")

        return

    # Read File
    alist = []
    for line in FILE:
        alist.append(int(line))

    FILE.close()

    return alist

FileNotFoundError: [Errno 2] No such file or directory: '.\\filesForAssignment1\\file1000'

如果文件不存在,w模式会导致创建文件(如果文件不存在,则会被截断,os.remove在那里实际上并不有用),但是它确实希望中间目录存在

这意味着您应该在尝试创建文件之前确保文件('.\\filesForAssignment1)的路径确实存在

os.makedirs(os.path.dirname(fileName), exists_ok=True)

该怎么做,还是

pathlib.Path(fileName).parent.mkdir(parents=True, exists_ok=True)

为了更现代一些

脚本中还有一系列其他小问题:

  • 主功能通常应该是“门控”的,这样就可以在不运行模块的情况下导入模块
  • 显式关闭文件已不再受欢迎,因为它不可靠
  • 在“文本”模式(默认)下打开文件时,应始终提供编码
  • pathlib很有趣,这样您就不必处理路径分隔符和所有那些废话了
  • 除非需要处理这种情况,否则如果文件不存在,我只会让open(fname, 'r')出错

以下是一个我认为应该稍微改进的版本:

import pathlib
import random
import os
import time


def fillFile(fileSize, fileName):
    with fileName.open('w', encoding='utf-8') as f:
        for i in range(fileSize):
            r = random.randint(0,fileSize+1000)
            f.write(f"{r}\n")

def readFile(fileName):
    with fileName.open(encoding='utf-8') as f:
        return [int(line) for line in f]

OUT_DIR = pathlib.Path.cwd().joinpath("filesForAssignment1")
FILE_SIZES = [1000, 5000, 10000, 25000, 50000, 100000, 200000]
def mainForFiles():
    # Dosyaları oluştur
    OUT_DIR.mkdir(parents=True, exist_ok=True) # make sure the directory exists

    statFilePath = pathlib.Path("fileStats.txt")
    with statFilePath.open('w', encoding='utf-8') as statFile:
        statFile.write("fillFile")

        print("WRITING TO FILES")

        for i in FILE_SIZES:
            start = time.time()
            fillFile(i, OUT_DIR.joinpath(f'file{i}'))
            finish = time.time()

            statFile.write(f"  {finish-start}")
            print(f"File Size = {i}   Write Time = {finish-start})")

        statFile.write("\n")

        print("READING FILES")
        statFile.write("readFile")

        for i in FILE_SIZES:
            f = OUT_DIR.joinpath(f'file{i}')

            # Dosyayı oku
            start = time.time()
            alist = readFile(f)
            finish = time.time()

            statFile.write(f"  {finish-start}")
            print (f"File Size = {i}   Dosya Okuma Zamanı = {finish-start}")

        statFile.write("\n")

if __name__ == '__main__':
    mainForFiles()

相关问题 更多 >