2016-03-03 6 views
0

Мне нужно взять строки из текстового файла и использовать их в качестве переменных в функции python.Как перебирать строки текстового файла?

def call(file): 
     with open(file) as infile, open('output.txt', 'w') as outfile: 
      do stuff in a for loop 

файл это имя переменной, и я планирую иметь текстовый файл, содержащий список имен текстовых файлов, как так:

hello.txt 
world.txt 
python.txt 

Я могу вызвать функцию с одним именем файла штрафа:

call(hello.txt) 

Но у меня есть длинный список файлов, которые мне нужно пройти. Как я могу прочитать файл, содержащий имена файлов, за строкой при вызове функции один раз с каждым именем файла?

+0

Можете ли вы просто пройти через каталог и называть его файлами? И я уверен, что у вас есть файл, в котором есть имена всех других файлов, и вы хотите прочитать имена из этого файла? – Jacobr365

+0

Нет. Я не могу пройти через все файлы в каталоге. Да, точно. Файл, содержащий все имена файлов в виде строк – johnnydrama

+0

Пожалуйста, отредактируйте свой вопрос, чтобы, _as написал_, он говорит что-то далекое, как то, что вы хотите задать. Вопросы Jacobr365 и ваш ответ полностью меняют то, что вы просите. Ваш вопрос _real_, похоже, сводится к: «Как перебирать строки текстового файла?», Который находится в [Учебном руководстве Python] (https://docs.python.org/3/tutorial/inputoutput.html # методы-оф-файлов-объектов). –

ответ

2

«Как я могу прочитать файл, содержащий строку имена файлов по строке при вызове функции один раз с каждым именем файла?» ... вы только что объяснили, что делать. Предположив текстовый файл, содержащий другие имена файлов является "listoffiles.txt",

with open('listoffiles.txt') as fp: 
    for line in fp: 
     filename = line.strip() 
     if filename: 
      call(filename) 

Обратите внимание, что из-за call держит перезапись output.txt вы можете иметь другие вопросы.

В зависимости от других целей дизайна, конечно, вы могли бы работать с открытым файловым объектом, а не с именем файла. Это делает функцию более общей и потенциально полезной для других случаев, таких как использование других файловых объектов, таких как StringIO.

def call(output, filename): 
    with open(filename) as infile: 
     # do some stuff directly with file 

with open('output.txt', 'w') as output: 
    with open('listoffiles.txt') as fp: 
     for line in fp: 
      filename = line.strip() 
      if filename: 
       call(output, filename) 
+0

Это имеет большой смысл. Благодаря! Это можно решить с помощью +? – johnnydrama

+0

Да, ..., в зависимости от того, что вы хотите. Это приведет к добавлению данных в один выходной файл. – tdelaney

+2

@johnnydrama Почему бы не просто передать в выходной файл объект, поэтому вам не нужно открывать и закрывать его при каждом вызове. Просто сделайте входной аргумент функции 'call'. Затем только откройте выход один раз в начале и закройте один раз в конце, когда вы прочитали все ваши файлы. – zephyr

0

в следующем примере я назначить текстовый файл строку произвольной переменной я тогда устранить «.txt» так, чтобы придерживаться имя переменной конвенции , то я задаю значение строки х к числу 2

x='hello.txt' 
x = x.replace(".txt","") 
exec("%s = %d" % (x,2)) 
print(str(x) + ' is equal to: ' + str(hello)) 

если вы попробуете код, который вы должны получить

hello is equal to: 2 
+0

Я не вижу, как это связано с вопросом. – tdelaney

+0

«Мне нужно взять строки из текстового файла и использовать их в качестве переменных в функции python». –

+0

Вы должны попытаться связать его с кодом в вопросе или, по крайней мере, сделать его четко связанным. Это не. – Jacobr365

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