写入具有特定列数的文件
Posted
技术标签:
【中文标题】写入具有特定列数的文件【英文标题】:Write file with specific number of columns 【发布时间】:2021-04-21 15:50:32 【问题描述】:我需要编写一个具有特定列数的文本文档(在这种情况下总是有 16 个)。我发现实现这一点的方法是:检查我想要的值所在的数组(列表)的 len,然后除以 16,得到足以精确等于 16 列的行数。当然,有一种更正确的方法来优化这个过程。 我利用来问的另一个问题是(因为我真的不知道该怎么做):如何在 16 列中写入并始终留下与该数组的最大数量相等的缩进(即:8500 = 4 个字符= 4 个空格)。像这样的:
Example
这是我的代码:
f = open('Questions.txt','r')
my_list = [line.split(',')[0] for line in f]
ff = open('Questions_new.txt','w')
i=0
x=len(my_list)
rows = int(round(len(my_list)//16))
for i in range(rows):
row = my_list [i::rows]
ff.write(' '.join(str(x) for x in row)+'\n')
使用line.split是因为我从一个文本文档(下面的例子)中提取一个文本文档的所有字符,直到找到一个逗号:
1213,4214 12312
13,1231 123
45,343
他只是为我保留信息:
1213
13
45
如果有人可以帮助我将不胜感激。
【问题讨论】:
【参考方案1】:下面是一些我会想到的代码行:
my_list = [ '12', '34', '3467',
'1234', '34', '34',
'123', '34567', '345',
'23', '78'] # your input list
ncolumns = 3 # specify desired number of columns
my_list += [""]*(ncolumns-len(my_list)%ncolumns) # make list multiple of ncolumns
my_list = [my_list[i:i+ncolumns] for i in range(0,len(my_list),ncolumns)] # reshape in rows
rowformat = (": "*ncolumns).format(*(max(map(len,col)) for col in zip(*my_list))) # format of row text
with open("outputfile.txt","w") as fid:
fid.write("\n".join(rowformat.format(*row) for row in my_list))
就像python中的很多东西一样,有很多不同的方法可以实现同样的事情,所以必须指定“肯定有更正确的方法来优化这个过程”的含义:你的意思是最少的行数的代码?最节省内存?最易读?根据您对“正确”的定义,您的代码可能比我的更正确;)
在此示例中,列宽是通过字符串格式语法实现的,请参见例如python-docs。有了它,您还可以轻松调整列的对齐方式等。
【讨论】:
【参考方案2】:回答您的第一个问题关于行数,我认为您的方法非常有效。另一种结构方式包括:
有一个 while 循环,它在每次迭代中从文本文件中读取一个新值。在 while 循环中,为n_rows
和 n_cols
保留一个计数器。
将新值写入到当前行右侧的output[n_rows][n_cols]
的输出中
如果n_cols == 16
,增加n_row++
关于您的第二个问题,您可以:
首先读取所有值,并将它们存储到一个数组中 向数组添加新值时,将位数与当前最大位数进行比较 将数组中的值复制到输出文本文件中,填充到最大位数【讨论】:
以上是关于写入具有特定列数的文件的主要内容,如果未能解决你的问题,请参考以下文章