Как написать / добавить 2 столбца в файл .txt с помощью Python? - PullRequest
0 голосов
/ 30 января 2019

Я новичок в программировании. Я работаю в небольшом проекте. У меня проблема с этим:

Я хочу добавить 2 разных столбца в один файл .txt.

def write_file_content(file_name_to_write):
    container=[]
    date=get_current_date()
    time=get_current_time()
    container.append(date)
    container.append(time)

  with open(get_EveryDayTrans_folder_path()+file_name_to_write+".txt","a") as edit_file:
        for nm in range(1,11):
            edit_file.write('%s.\n'%nm)
        for item in container:
            edit_file.write('%s\n' %item)

с помощью этого кода я получаю следующий вывод: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 01-29-2019 10:40 PM

но я хочу получить выводкак это:

  1. 01-29-2019

  2. 10: 40 вечера

3.

4.

5.

6.

7.

8.

9.

10.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Существует очень удобная функция Python с именем zip . Она принимает две итерации (= список и подобные вещи) и возвращает кортежи, в которых каждый кортеж содержит один элемент обоих.Ну, вроде как почтовый индекс.Он очень часто используется для параллельного просмотра двух списков.В вашем случае это будет:

для нм, элемент в zip (диапазон (1,11), контейнер):

, а затем вы можете просто напечатать nm иitem Я не очень знаком со стилем% s, поэтому я просто написал бы:

edit_file.write ("{} {}". format (nm, item))

или если вы используете Python 3.6 или около того:

edit_file.write (f "{nm} {item}")

Надеюсь, это поможет!

ps: Я только что увидел, что во втором столбце есть только два элемента.Функция zip останавливается, когда исчерпывается итерация короче .В вашем случае вы можете захотеть обратного.Для этого есть zip_longest из модуля itertools:

из itertools импорт zip_longest для nm, элемент в zip_longest (range (1,11), container, fillvalue = ""):

Возвращается:

нм, элемент = (0, контейнер [0])

нм, элемент = (1, контейнер [1])

нм, элемент = (2, "")

нм, элемент = (3, "")

и т. Д.

0 голосов
/ 30 января 2019

Есть две проблемы с вашим кодом, которые необходимо исправить:

  1. Вы используете два цикла, один, а затем другой, для печати в файл.Вам нужно объединить эти циклы, чтобы вы могли знать номер и элемент, который вы хотите напечатать в одной и той же итерации цикла.У вас есть только один шанс * правильно напечатать строку, поэтому вам нужно все, что должно быть на этой строке, готово к работе.
  2. Вы пишете символ новой строки после нужного вам числа.Это мешает вам писать больше текста в той же строке.Вместо этого выведите все данные, отформатированные вместе, в один вызов write () с \r\n в конце.
with open(get_EveryDayTrans_folder_path()+file_name_to_write+".txt","a") as edit_file:
    nm = 1
    for item in container:
        edit_file.write('%s. %s\r\n' % (nm, item))
        nm += 1

* Только один шанс, если вы не вернетесь назад и не отредактируете строку в файлееще раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...