Итерация с переменной в Python 2.7 - PullRequest
0 голосов
/ 16 марта 2012

Привет, эксперты! Я хочу сделать цикл чтения текстового файла, а затем вывести (8) текстовых файлов со следующим кодом:

for i in range(1,9):
    with open(inputgui, 'r') as input1:
        junkinfo = [next(input1) for dummy in range(22)]
        with open(output, 'w') as output1:
            for line in input1:
                columns = line.strip().split()
                output1.write('{:8}{:8}\n'.format(columns[1], columns[i+1]))

Обратите внимание, что переменная inputgui является текстовой переменной изпользователь и вывод - текстовая переменная от пользователя.Например, пользователь в графическом интерфейсе выберет 'C:/Data.txt' и захочет присвоить имя выходу и повторить 8 раз, чтобы получить 'C:/NewData1.txt', 'C:/NewData2.txt' и т. Д. Как мне отформатировать переменную output для итерации или наиболее эффективным способом?

Ответы [ 3 ]

4 голосов
/ 16 марта 2012

Предполагая, что пользователь предоставляет имя файла с расширением .txt, вы можете сделать это:

for i in range(1,9):
    with open(inputgui, 'r') as input1:
        junkinfo = [next(input1) for dummy in range(22)]

        newOutput = output[:-4] + str(i) + output[-4:]

        with open(newOutput, 'w') as output1:
            for line in input1:
                columns = line.strip().split()
                output1.write('{:8}{:8}\n'.format(columns[1], columns[i+1]))

Если расширение неизвестно, вам нужно будет найти где.это и склеить в зависимости от его местоположения

3 голосов
/ 16 марта 2012

Другие ответы не упомянули об этом, но вы можете сделать код более эффективным и Pythonic, используя функцию list.

# Change
junkinfo = [next(input1) for dummy in range(22)]

# To
junkinfo = list(input1)[:22] 

# or even better...
junkinfo = list(input1)

Если вам не нужно обрезатьэто до 22 элементов, вы можете использовать последний.

1 голос
/ 16 марта 2012

Вот как можно создать имя выходного файла для любого произвольного расширения файла:

output_file = (str(i) + '.').join(output.rsplit('.', 1))

Например:

>>> output = r'C:\Some.File.Name.data'
>>> for i in range(1, 4):
...     print (str(i) + '.').join(output.rsplit('.', 1))
...
C:\Some.File.Name1.data
C:\Some.File.Name2.data
C:\Some.File.Name3.data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...