我正在尝试创建一个新的 .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的权限问题?
原始字符串不能以一个反斜杠“\”结尾,因此您在代码中使用的内容(如
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)
当我们物理创建一个新文件时,我们可能需要将文件夹目录(如果不存在)的创建与文件创建事务分开。
这样就保证了在创建文件时不会遇到相关目录是否存在的冲突。
我准备了该方法的示例如下:
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'])
我希望它对您的项目有用。