Используя список, чтобы проиллюстрировать использование format()
для выравнивания элемента, способ решения вашей проблемы следующий:
row_item = ['row_name', 'California Datacenter']
output = '{}{:>40}'.format(row_item[0], row_item[1])
print(output)
Вывод:
row_name California Datacenter
Вхождения «{}» представляют одну переменную в примере format(variable_1, variable_2)
.
Синтаксис внутри второго элемента ({:>40}
) представляет выравнивание по правому краю, используя :>
.:<
будет выравнивание по левому краю.40
обозначает, что ширина поля вывода будет дополнена до 40 символов.
Вот несколько оптимизированная версия вашего кода, которая должна привести к желаемому выводу, переменные переименованы, чтобы быть более читабельными (всегдахорошая привычка к рассмотрению), а форматирование доступно как переменная.Как уже упоминалось, число в строке formatting
определяет ширину заполнения.Регулировка, которая переместит колонки ближе или дальше.Обратите внимание, что я взял на себя смелость форматировать строки Product ID
, а также row_name
.
Я также абстрагировал ваши имена файлов в переменные, для удобства чтения, и переместил второй наборвложенные with open()
операторы в составные with
менеджеры контекста, так как они не изменяются в цикле.
import glob
import os
import time
import getpass
user = getpass.getuser()
timestr = time.strftime("%Y%m%d-%H%M%S")
read_files = glob.glob("myOrders/*.txt")
myOrderCopies_file = "myOrderCopies/" + user + "_" + timestr + "_Hard_Drive_Order.txt"
hwOrderCopies_file = "hwOrderCopies/" + user + "_" + timestr + "_HardDriveSummary.txt"
searchquery = 'row_name', 'Product ID'
term = "Product ID"
formatting = '{:<40}{:>}\n\n'
# Read .txt files and put lines 'row_name' and 'Product ID' into new .txt file
with open(myOrderCopies_file, "wb") as myOrderCopies:
for file_name in read_files:
with open(file_name, "rb") as infile:
myOrderCopies.write(infile.read())
with open(myOrderCopies_file, 'rb') as myOrderCopies, open(hwOrderCopies_file, "w") as hwOrderCopies:
term_counter = 0
lines = myOrderCopies.readlines()
for line in lines:
if line.startswith(searchquery):
if "row_name" in line:
split_line = line.split(' ')
else:
if term in line:
term_counter += 1
split_line = line.split(' : ')
hwOrderCopies.write(formatting.format(split_line[0], split_line[1]))
hwOrderCopies.write("\nTotal Number of Hard Drives: {}\n\n".format(str(term_counter)))