Создание файла в скрипте Python 2 для записи с использованием argv

Я хочу использовать argv для создания файла с помощью командной строки (пример >>> python thisscript.py nonexistent.txt), а затем записать в него из моего кода. Я использовал команду open(несуществующий, 'w'). Write(), но кажется, что могу открывать и записывать только в файлы, которые уже существуют. Я что-то пропустил?

Это мой код Это работает, пока файл, в который я пытаюсь записать, уже существует

from sys import argv



script, letter_file = argv



string_let='abcdefghijklmnopqrstuvwxyz'

list_of_letters = list(string_let)


f = open(letter_file)


wf = open(letter_file, 'w')



def write_func():
        for j in range(26):

                for i in list_of_letters:

                        wf.write(i)



write_func()

wf.close()



raw_input('Press <ENTER> to read contents of %r' % letter_file)


output = f.read()


print output

Но когда файл не существует, я возвращаю его в терминал.

[admin@horriblehost-mydomain ~]$ python alphabetloop.py nonexistent.txt
Traceback (most recent call last):
  File "alphabetloop.py", line 14, in <module>
    f = open(letter_file)
IOError: [Errno 2] No such file or directory: 'nonexistent.txt'
[admin@horriblehost-mydomain ~]$ 

3 ответа

Решение

open(filename, 'w') не только для существующих файлов. Если файл не существует, он создаст его:

$ ls mynewfile.txt
ls: mynewfile.txt: No such file or directory
$ python
>>> with open("mynewfile.txt", "w") as f:
...     f.write("Foo Bar!")
... 
>>> exit()
$ cat mynewfile.txt 
Foo Bar!

Обратите внимание, что 'w' всегда стирает существующее содержимое файла. Если вы хотите добавить в конец существующего файла или создать файл, если он не существует, используйте 'a' (То есть, open("mynewfile.txt", "a"))

Это можно сделать с помощью:

import sys
if len(sys.argv)<3:
    print "usage: makefile <filename> <content>"
else:
    open(sys.argv[1],'w').write(sys.argv[2])

демо:

paul@home:~/SO/py1$ python makefile.py ./testfile feefiefoefum
paul@home:~/SO/py1$ ls
makefile.py  makefile.py~  testfile
paul@home:~/SO/py1$ cat testfile 
feefiefoefum

Примечание: в sys.argvэлемент [0] имя скрипта, а последующие элементы содержат пользовательский ввод

Если вы откроете файл с флагом 'w', вы перезапишите содержимое файла. Если файл не существует, он создаст его для вас.

Если вы хотите добавить файл, вы должны открыть его с флагом "а".

Вот пример:

with open("existing.txt", "w") as f:
  f.write("foo")  # overwrites anything inside the file

existing.txt теперь содержит "foo"

with open("existing.txt", "a") as f:
  f.write("bar")  # appends 'bar' to 'foo'

existing.txt теперь содержит "foobar"

Кроме того, если вы не знакомы с with Заявление, которое я использовал выше, вы должны прочитать об этом. Это более безопасный способ открывать и закрывать файлы с помощью так называемого Context Manager.

Другие вопросы по тегам