如何在不使用 csv 的情况下获取列中的 .txt 文件?
How do I get a .txt file in columns without using csv?
最好是这样的,但转换成人们所说的"The Old Way"。我正在尝试使用 headers.
获取 4 个列表和 4 个列
到目前为止我有什么(我是 Python 文盲甚至认为这必须在 Python 中)。
旧方法:
print(" Student Report")
print("First Last DOB Rank")
print("--------------------------------")
ReadFile = open("mytext.txt","r")
with ReadFile as f:
[line.split() for line in f]
csv方式:
import csv
columns = [[] for _ in range(4)] # 4 columns expected
with open('path', rb) as f:
reader = csv.reader(f, delimiter=' ')
for row in reader:
for i, col in enumerate(row):
columns[i].append(col)
问题是我如何将这个(参考下面的 "Sample Report")放入一个包含 4 列的正确列表中。
谢谢:)
大约有30个左右的假学生。
预期结果
Sample Report:
Student Report
First Last DOB Rank
--------------------------------------------
Coreena Delisio 8/7/1988 Freshman
William Barnes 10/26/1987 Junior
Joseph Mahan 9/18/1987 Senior
Susan Bevly 9/13/1987 Senior
End of Report
感谢大家的反馈和回答,我找到了
这是让我得到这个结果的代码。
## Report's Title
print(" Student Report")
## List Headers
F = ('First')
L = ('Last')
Birth = ('DOB')
Grade = ('Rank')
print('{:10} {:13} {:11} {:4}'.format(F, L, Birth, Grade))
print("--------------------------------------------")
ReadFile = open("input_file.txt","r")
## List of Lists Turned Into Columns
for line in ReadFile:
list = line.split(',')
First = list[0]
Last = list[1]
DOB = list[2]
Rank = list[3]
print('{:10} {:10} {:14} {:10}'.format(First, Last, DOB, Rank)) ## Columns
## 2 Added Blank Lines to Show Cleanliness
print()
print()
## End of Report
print('End of Report')
ReadFile.close()
这个有用吗?
padding = 5
n_columns = 4
columns = [['a','bc3','c','de'],['sadasd','sad','a','a'],['123123'],['123']]
max_entry_widths = [max(len(entry) for entry in column)
for column in columns]
column_widths = [width+padding for width in max_entry_widths]
n_rows = max(len(column) for column in columns)
row_str = ("{{: <{}}}" * n_columns).format(*column_widths)
rows = []
for row in range(n_rows):
entries = []
for col in range(n_columns):
try:
entries.append(columns[col][row])
except IndexError:
entries.append("")
rows.append(row_str.format(*entries))
print('\n'.join(rows))
# a sadasd 123123 123
# bc3 sad
# c a
# de a
我不是这方面的专家,您可以打印出一个字符串,同时定义它的填充以及它可以证明您代表列的位置。
如何执行此操作的一个示例是首先为每个字符串分配一个值,例如:
for lines in open('mytxt.txt'):
first = lines.split()[0]
last = lines.split()[1]
DOB = lines.split()[2]
rank = lines.split()[3]
接下来您可以打印它们,同时定义第一列中可以打印多少个字符(最适合浮点数),以及各列之间的距离:
print('{:20} {:20} {:20} {:20}'.format(first, last, DOB, rank))
我决定将每列可以打印的字符限制为 20 个(这也将是您的填充)。您还可以使用以下方式居中、右对齐或左对齐:
##center_justify --> print('{:^20}'.format(center))
##right_justify --> print('{:>20}'.format(right))
##left_justify --> print('{:<20}'.format(left))
最好是这样的,但转换成人们所说的"The Old Way"。我正在尝试使用 headers.
获取 4 个列表和 4 个列到目前为止我有什么(我是 Python 文盲甚至认为这必须在 Python 中)。
旧方法:
print(" Student Report")
print("First Last DOB Rank")
print("--------------------------------")
ReadFile = open("mytext.txt","r")
with ReadFile as f:
[line.split() for line in f]
csv方式:
import csv
columns = [[] for _ in range(4)] # 4 columns expected
with open('path', rb) as f:
reader = csv.reader(f, delimiter=' ')
for row in reader:
for i, col in enumerate(row):
columns[i].append(col)
问题是我如何将这个(参考下面的 "Sample Report")放入一个包含 4 列的正确列表中。
谢谢:)
大约有30个左右的假学生。
预期结果
Sample Report:
Student Report
First Last DOB Rank
--------------------------------------------
Coreena Delisio 8/7/1988 Freshman
William Barnes 10/26/1987 Junior
Joseph Mahan 9/18/1987 Senior
Susan Bevly 9/13/1987 Senior
End of Report
感谢大家的反馈和回答,我找到了
这是让我得到这个结果的代码。
## Report's Title
print(" Student Report")
## List Headers
F = ('First')
L = ('Last')
Birth = ('DOB')
Grade = ('Rank')
print('{:10} {:13} {:11} {:4}'.format(F, L, Birth, Grade))
print("--------------------------------------------")
ReadFile = open("input_file.txt","r")
## List of Lists Turned Into Columns
for line in ReadFile:
list = line.split(',')
First = list[0]
Last = list[1]
DOB = list[2]
Rank = list[3]
print('{:10} {:10} {:14} {:10}'.format(First, Last, DOB, Rank)) ## Columns
## 2 Added Blank Lines to Show Cleanliness
print()
print()
## End of Report
print('End of Report')
ReadFile.close()
这个有用吗?
padding = 5
n_columns = 4
columns = [['a','bc3','c','de'],['sadasd','sad','a','a'],['123123'],['123']]
max_entry_widths = [max(len(entry) for entry in column)
for column in columns]
column_widths = [width+padding for width in max_entry_widths]
n_rows = max(len(column) for column in columns)
row_str = ("{{: <{}}}" * n_columns).format(*column_widths)
rows = []
for row in range(n_rows):
entries = []
for col in range(n_columns):
try:
entries.append(columns[col][row])
except IndexError:
entries.append("")
rows.append(row_str.format(*entries))
print('\n'.join(rows))
# a sadasd 123123 123
# bc3 sad
# c a
# de a
我不是这方面的专家,您可以打印出一个字符串,同时定义它的填充以及它可以证明您代表列的位置。
如何执行此操作的一个示例是首先为每个字符串分配一个值,例如:
for lines in open('mytxt.txt'):
first = lines.split()[0]
last = lines.split()[1]
DOB = lines.split()[2]
rank = lines.split()[3]
接下来您可以打印它们,同时定义第一列中可以打印多少个字符(最适合浮点数),以及各列之间的距离:
print('{:20} {:20} {:20} {:20}'.format(first, last, DOB, rank))
我决定将每列可以打印的字符限制为 20 个(这也将是您的填充)。您还可以使用以下方式居中、右对齐或左对齐:
##center_justify --> print('{:^20}'.format(center))
##right_justify --> print('{:>20}'.format(right))
##left_justify --> print('{:<20}'.format(left))