2016-02-18 4 views
1

Я хочу создать несколько текстовых файлов в Python. Эти файлы будут созданы при запуске кода. Я думал использоватьКак я могу написать файл Python во время выполнения?

fn = date.today().isoformat() + ".log" 

или

>>> from datetime import date 
>>> fn=ctime()+".txt" 
>>> print fn 
Thu Feb 18 22:21:35 2016.txt 

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

>>> fn = date.today().isoformat() + ".log" 
>>> print fn 
2016-02-18.log 
>>> quit() 
>>> fp = open(fn, "w") 
>>> fp.write("data") 
>>> fp.close() 
>>> fr=open(fp,"r") 

Traceback (most recent call last): 
    File "<pyshell#7>", line 1, in <module> 
    fr=open(fp,"r") 
TypeError: coercing to Unicode: need string or buffer, file found 

или

>>> fn=ctime()+".txt" 
>>> print fn 
Thu Feb 18 22:21:35 2016.txt 
>>> line1="unanimous resolution to this effect" 
>>> fp = open(fn, "w") 

Traceback (most recent call last): 
    File "<pyshell#11>", line 1, in <module> 
    fp = open(fn, "w") 
IOError: [Errno 22] invalid mode ('w') or filename: 'Thu Feb 18 22:21:35 2016.txt' 

Я застревать. Но мой смысл говорит, что я могу сделать какую-то интересную ошибку. Если кто-нибудь может любезно предложить, как я могу решить проблему или решить ошибки для решения проблемы. Заранее спасибо. Я использую Python2.7.11 на ОС Windows 10.

+1

Если вы попытаетесь использовать двоеточие в имени файла, это странно. См. [Дополнительные потоки данных Windows] (https://support.microsoft.com/en-us/kb/105763/) –

+0

Windows не разрешает символы ':' в именах файлов. В качестве альтернативы вы также можете использовать атрибут '.name' объекта файла, который был возвращен из вызова [' tempfile.NamedTemporaryFile]() '] (https://docs.python.org/2/library/tempfile.html # tempfile.NamedTemporaryFile), чтобы получить гарантированные уникальные имена файлов (хотя они не будут красивыми). – martineau

ответ

4

Первый из ваших ошибок, вероятно, просто из-за ошибки, вы должны открыть читаемый файл по имени файла fn, не fp (который является объектный файл, а не строка).

Вторая ошибка, как представляется, связана с ограничениями на имя файла для Windows, это не происходит в среде Linux.

+0

Спасибо. Это сработало, но я переписываю вопрос, поскольку я поставил вопрос немного неправильно. – Coeus2016

+0

FYI, «Thu Feb 18 22:21:35 2016.txt» - это файл с именем «Thu Feb 18 22» с потоком с именем «21» и потоковым типом «35 2016.txt». Последнее не является допустимым типом потока, например '$ DATA' или' $ INDEX_ALLOCATION'. См. MSDN в [Файловые потоки] (https://msdn.microsoft.com/en-us/library/aa364404). Тип по умолчанию - '$ DATA', а поток по умолчанию - анонимный, т. Е.' File.ext' эквивалентен 'file.ext :: $ DATA'. В каталоге также могут быть потоки '$ DATA', но не анонимные; попытка создать или открыть каталог в виде обычного файла эквивалентна доступу к 'dirname :: $ DATA', для которого доступ запрещен. – eryksun

0

Вы не можете иметь ":" в имени файла, используйте:

import datetime 
fn = datetime.datetime.now().strftime("%Y-%m-%d %H%M%S") + ".log" 
print fn 

дает:

2016-02-18 174710.log 
0

использование:

fr=open(fp.name,"r") 

вместо:

fr = open(fp, "r") 
Смежные вопросы