如何修复在 Python 中创建 csv 时的“没有这样的文件或目录”错误

问题描述 投票:0回答:2

我正在尝试创建一个新的 .csv 文件,但在代码的

with open(...)
部分中收到“没有此类文件或目录”。

我修改了代码的

with open(...)
部分以排除方向,替换字符串名称,并且效果很好。该文档是用我在 C 盘上的所有 PyCharm 划痕创建的。

我认为值得注意的是,我在 C: 驱动器上运行 python,而给我带来问题的目录存在于 D: 驱动器上。不确定这是否真的有什么不同,但我

path = r"D:\Folder_Location\\"
plpath = pathlib.PurePath(path)
files = []
csv_filename = r"D:\Folder_Location\\"+str(plpath.name)+".csv"

#Create New CSV
with open(csv_filename, mode='w',newline='') as c:
    writer = csv.writer(c)
    writer.writerow(['Date','Name'])

我希望代码创建一个新的 .csv 文件,然后由特定文件夹位置中的脚本的其余部分使用,但我收到了以下错误:

  File "C:/Users/USER/.PyCharm2018.2/config/scratches/file.py", line 14, in <module>
    with open(csv_filename, mode='w',newline='') as c:
FileNotFoundError: [Errno 2] No such file or directory: '[INTENDED FILE NAME]'

Process finished with exit code 1

错误代码正确地构建了文件名,但随后又说它找不到位置,这让我再次相信,这不是代码本身,而是单独驱动器的问题(推测)。另外,第 14 行是

with open(...)
的开始位置。

编辑:我测试了一个理论,并将文件夹移动到 C: 驱动器,只需从新位置复制并粘贴即可更新路径(仍然使用 Python 中文件路径末尾的 \ ),并且它有效。新的 .csv 文件现已存在。 那么为什么 Drive 会带来改变呢? Python的权限问题?

python csv
2个回答
1
投票

原始字符串不能以一个反斜杠“\”结尾,因此您在代码中使用的内容(如

path = r"D:\Folder_Location\\"
)是正确的,但实际上您在路径末尾不需要任何反斜杠:

我运行了一些像你一样的类似测试,一切顺利,只有当我使用不存在的目录时才出现相同的错误

这就是我得到的:

FileNotFoundError: [Errno 2] No such file or directory: 'E:\\python\\myProgects\\abc\\\\sample3.txt'

所以我敢打赌,您在

path = r"D:\Folder_Location\\"
中分配了一个不存在的路径,或者您的路径引用的是文件而不是文件夹 确保只运行这个:

import os
path = r"D:\Folder_Location\\"
print(os.path.isdir(path))  # print true if folder already exists

更好的方法:

file_name = str(plpath.name)+".csv"
path = r"D:\Folder_Location"
csv_filename = os.path.join(path, file_name)

0
投票

当我们物理创建一个新文件时,我们可能需要将文件夹目录(如果不存在)的创建与文件创建事务分开。

这样就保证了在创建文件时不会遇到相关目录是否存在的冲突。

我准备了该方法的示例如下:

import os, csv
from typing import List

def create_folder(folder_path):
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)

def create_csv(directory:str, file_name:str, has_headers:bool, headers:List[str]=[]):
    create_folder(directory) 
    if os.path.exists(directory):
        file_path = f'{directory}\\{file_name}.csv'
        if not os.path.exists(file_path):
            with open(file_path, mode='w', encoding="utf-8", newline='') as file:
                writer = csv.writer(file, delimiter=',')
                if has_headers and len(headers) > 0:
                    writer.writerow(headers)
                
                print(file_path)


create_csv(os.path.join(os.getcwd(), 'my_folder'), 
           'test_file',True, ['column_1', 'column_2', 'column_3'])

我希望它对您的项目有用。

© www.soinside.com 2019 - 2024. All rights reserved.