在python中创建新文件会导致FileNotFoundError

时间:2015-09-02 13:23:06

标签: python python-3.x

我试图从python 3中的文件名列表中创建一组随机文件。

#!/usr/local/bin/python3

import random
import sys

random.seed()

print("Reading lines from ", sys.argv[1])

linecount = 0
lines = []
with open(sys.argv[1]) as f:
    for line in f:
         lines.append(line)

filelist = random.sample(lines, 5);
for newfile in filelist:
    print("Touching file ", newfile)
    open(newfile.rstrip(), "a+")

第一个文件始终失败:

$ : ./file-gen.py files.txt
Reading lines from  files.txt
Touching file  62/6226320DE.pdf

Traceback (most recent call last):
  File "./file-gen.py", line 19, in <module>
    open(newfile.rstrip(), "a+");
FileNotFoundError: [Errno 2] No such file or directory: '62/6226320DE.pdf'

任何想法缺少什么?

2 个答案:

答案 0 :(得分:2)

我认为问题在于文件模式a +将创建文件(如果文件不存在),而不是目录。您必须编写自定义代码以从路径中拆分文件名行(或者更好地使用os.path:https://docs.python.org/2/library/os.path.html,甚至可能os.path.dirname(path)

查看:How to check if a directory exists and create it if necessary?

警惕在系统中创建随机路径的安全注意事项。验证路径是否在特定沙箱中(考虑有人在您的../..//etc/passwd文件中添加条目,以便您附加随机用户数据.. os.path.abspath可能很有用 - 对于这个原因我担心粘贴代码只会创建你复制和粘贴的随机目录而不考虑这种影响。

答案 1 :(得分:0)

我建议第一步尝试打开特定文件而不是输入中的随机文件集来排除权限和路径问题。

您还应该尝试打印os.path.getcwd()以确保您具有写入权限。