2015-09-02 8 views
1

Im пытается создать случайный набор файлов из списка имен файлов в Python 3.Создание нового файла в Python вызывает FileNotFoundError

#!/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' 

Любые идеи, чего не хватает?

ответ

1

Я считаю, что проблема в том, что режим файла 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

Создание каталога сначала решило проблему. – BetaRide

0

Я бы предложил в качестве первого шага попытаться открыть конкретный файл, а не случайный набор файлов из ввода, чтобы исключить разрешения и проблемы с пути.

Вы также должны попробовать печать os.path.getcwd(), чтобы убедиться, что у вас есть права на запись.

Смежные вопросы