Python PermissionError:[Errno 13]权限被拒绝:output.csv
用户提供源目录后,以下脚本将读取CSV列表。然后,它获取一个csv,并将其内容逐行复制到一个新的csv,直到达到100000行,此时将创建一个新的csv,以继续此过程,直到原始csv被完全复制。然后对目录中的下一个csv文件重复该过程 我有时会遇到上面的PermissionError,不确定如何修复它,但有时我会运行脚本,并且不会遇到任何问题。我已经确认输入和输出文件在我的机器上都没有打开。我还尝试将我的目录文件夹的属性更改为非只读,尽管这总是会恢复。当错误确实发生时,总是在第一次开始处理csv的几秒钟之内。一旦你在大约5秒钟内,它不会给出该csv的错误。但它可能会在以后得到一个新的输入csvPython PermissionError:[Errno 13]权限被拒绝:output.csv,python,csv,Python,Csv,用户提供源目录后,以下脚本将读取CSV列表。然后,它获取一个csv,并将其内容逐行复制到一个新的csv,直到达到100000行,此时将创建一个新的csv,以继续此过程,直到原始csv被完全复制。然后对目录中的下一个csv文件重复该过程 我有时会遇到上面的PermissionError,不确定如何修复它,但有时我会运行脚本,并且不会遇到任何问题。我已经确认输入和输出文件在我的机器上都没有打开。我还尝试将我的目录文件夹的属性更改为非只读,尽管这总是会恢复。当错误确实发生时,总是在第一次开始处理csv
"""
Script processes all csv's in a provided directory and returns
csv's with a maximum of 100,000 rows
"""
import csv
import pathlib
import argparse
import os
import glob
def _get_csv_list(
*, description: str = "Process csv file directory.",
):
"""
Uses argument parser to set up working directory, then
extracts list of csv file names from directory
Args: Directory string
Returns list of csv file name strings
"""
parser = argparse.ArgumentParser(description=description)
parser.add_argument(
"SRC", type=pathlib.Path, help="source (input) directory"
)
parsed_arg = parser.parse_args()
os.chdir(parsed_arg.SRC)
return glob.glob("*.{}".format("csv"))
def _process_csv(file_name):
"""
Iterates through csv file and copies each row to output
file. Once 100,000 rows is reached, a new file is started
Args: file name string
"""
file_index = 0
max_records_per_file = 100_000
with open(file_name) as _file:
reader = csv.reader(_file)
first_line = _file.readline()
first_line_list = first_line.split(",")
for index, row in enumerate(reader):
if index % max_records_per_file == 0:
file_index += 1
with open(
f"output_{file_name.strip('.csv')}_{file_index}.csv",
mode="xt",
encoding="utf-8",
newline="\n",
) as buffer:
writer = csv.writer(buffer)
writer.writerow(first_line_list)
else:
try:
with open(
f"output_{file_name.strip('.csv')}_{file_index}.csv",
mode="at",
encoding="utf-8",
newline="\n",
) as buffer:
writer = csv.writer(buffer)
writer.writerow(row)
except FileNotFoundError as error:
print(error)
with open(
f"output_{file_name.strip('.csv')}_{file_index}.csv",
mode="xt",
encoding="utf-8",
newline="\n",
) as buffer:
writer = csv.writer(buffer)
writer.writerow(first_line_list)
writer.writerow(row)
def main():
"""
Primary function for limiting csv file size
Cmd Line: python csv_row_limiter.py . (Replace '.' with other path
if csv_row_limiter.py directory and csv directory are different)
"""
csv_list = _get_csv_list()
for file_name in csv_list:
_process_csv(file_name)
if __name__ == "__main__":
main()
此外,请注意,输入csv的内容的唯一要求是它们有大量的行100000+和一些数据量
有没有关于如何解决此问题的想法?尝试以root用户身份打开它,即尝试通过root或su权限运行此python脚本。我的意思是以root用户身份登录,然后运行这个python脚本。希望这有帮助 尝试以root用户身份打开它,即尝试通过root或su权限运行此python脚本。我的意思是以root用户身份登录,然后运行这个python脚本。希望这有帮助 此代码从不尝试打开名为output.csv的文件作为标题声明。此代码从不尝试打开名为output.csv的文件作为标题声明。请阅读您自己的评论。我还尝试将我的目录文件夹的属性更改为非只读,尽管此操作总是返回请阅读您自己的评论。我还尝试将我的目录文件夹的属性更改为非只读,尽管这总是会恢复