2014-01-27 3 views
0

EDIT 3: Решено не использовать метод записи внутри модуля2.функция. я просто передал вещи, которые мне нужны, чтобы записать переменные в module1, а затем использовал метод записи. намного проще, и они пишут в порядке сейчас. Еще раз спасибо всем.Python: Запись в один файл через модули?

EDIT 2: Так что теперь у меня есть запись во модулей обработки, за исключением того, что функции отображения приоритет над кодом Module1:

f.write("bob") 
module2.otherfunctionthatwrites(f) 
module2.otherfunctionthatwrites(f) 
f.write("bob") 

пишет в таком порядке:

writtenfrommodule2function 
writtenfrommodule2function 
bob 
bob 

вместо настоящего заказа:

bob 
writtenfrommodule2function 
writtenfrommodule2function 
bob 

любая идея wh в может продолжаться?


Спасибо, что ответили на старый вопрос: передайте f -> module2.function1 (f).

Скажем, у меня есть главный сценарий в Module1:

import module2 

filename = raw_input("What would you like to name the output file?: ") 
with open(str(filename + ".txt"), "w") as f: 
    f.write("Test2") 

module2.function1() 

Итак, я использую функцию, которая была загружена из module2. говорят, что function1(), из module2, содержит этот код:

def function1(): 
    f.write("Test 3") 

Как бы избежать NameError: глобальное имя е не определено. т.е. он не признает, что я уже сказал ему, какой файл писать раньше в модуле1. Я хотел бы иметь возможность создать файл в модуле1 и все же многократно использовать функции из модуля2 в модуле1, всегда ссылаясь на тот же файл с короткой рукой f.write() внутри этих функций.

Любые идеи? Спасибо.

+2

Почему вы не передаете объект файла функции 'function1':' function1 (f) '. 'def function1 (f): f.write (" Test 3 ")'. BTW, вызов функции должен выполняться внутри блока 'with'. В противном случае попытка записи в закрытый файл вызовет исключение. – falsetru

+0

Я хотел бы добавить к тому, что сказал @falsetru: это очень плохая практика - использование глобальных переменных в функциях (исключение может быть CONSTANT, которое вы импортировали в модуль, где определена функция), тем более, что вы импортируете функцию - и используете глобальные переменная от модуля импорта. – volcano

+0

спасибо за ответ. прошел f действительно. однако, я записываю arent, происходящий в порядке основного кода модуля. вызываемые модули2.функции записываются до f.write() s в моем основном модуле, даже когда вызываются функции module2.functions после основного модуля f.write(). Есть идеи? – InfinteScroll

ответ

1

Вы можете передать объект файла function1().

Но файл с указателем f будет закрыт после выполнения кадра with. Поэтому вызов module2.function1() после with блока не будет работать.

P.S .: Прежде чем публиковать этот ответ, я не понял, что @falsetru уже отправил ответ в комментарии.

1

модуль 1 ----------------------

import module2 

filename = raw_input("What would you like to name the output file?: ") 
with open(str(filename + ".txt"), "w") as f: 
    f.write("Test2") 
    module2.function1(f) 

Модуль 2 ------------- ---------

def function1(f): 
    f.write("Test 3") 
Смежные вопросы