Python; пытаясь добавить эти файлы построчно с вкладкой между - PullRequest
0 голосов
/ 07 ноября 2018

Я читаю текстовые файлы из командной строки и пытаюсь произвести вывод следующим образом ... Желаемый вывод с учетом этих аргументов командной строки

По сути, я хочу читать файлы из командной строки; возьмите первую строку из каждого файла и напечатайте их на одной строке, разделенной вкладкой. Возьмите вторую строку из каждого файла и напечатайте их на следующей строке, разделенной вкладкой и т. Д.

Это лучший код, который я придумал ( Я новичок, и я слишком долго пытался просматривать другие ответы; glob & os не помогал мне понять, как это сделать это; я просто хотел бы использовать базовые циклы и открытие файлов для этого ):

import sys
l = []
list_files = sys.argv[:1]

for fname in list_files:
  open(fname) as infile:
    for line in infile:
      line = line.strip()
      if line == '':
        l.append("''")
      else:
        l.append(line)

print(l) # List of all appended animals. Not in the right order 
#(takes all names from one file, then all the names from the 
#next instead of taking one line from every file on each iteration)

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Лучший способ открыть файлы в python - это with. Более подробную информацию можно найти на https://www.pythonforbeginners.com/files/with-statement-in-python. В любом случае:

import sys

if len(sys.argv) != 3:
    sys.exit(1)

filename1 = sys.argv[1]
filename2 = sys.argv[2]

with open(filename1, 'r') as file1, open(filename2, 'r') as file2:
        for line1, line2 in zip(file1, file2):
            print(line1.strip(), line2.strip(), sep='\t')

Это можно изменить, чтобы разрешить более двух файлов:

import sys

if len(sys.argv) != 3:
    sys.exit(1)

filenames = sys.argv[1:]

all_lines = []

for filename in filenames:
    with open(filename, 'r') as file:
        all_lines.append([l.strip() for l in file.readlines()])

for line in zip(*all_lines):
    print(*line, sep='\t')
0 голосов
/ 07 ноября 2018

Это минимально измененная версия, которая должна работать.

import sys
from itertools import zip_longest

files = []
list_files = sys.argv[:1]

for fname in list_files:
  with open(fname) as infile:  # Don't forget the `with`!
    l = []
    for line in infile:
      line = line.strip()
      if line == '':
        l.append("''")
      else:
        l.append(line)
    files.append(l)  # list of lists

for lines in zip_longest(*files, fillvalue=''):  # transpose list of lists
  print(*lines, sep='\t')  # separate with tabs.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...