【问题标题】: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

如果有人可以帮助我将不胜感激。

【问题讨论】:

    标签: python arrays xcode write


    【解决方案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_rowsn_cols 保留一个计数器。
        • 将新值写入到当前行右侧的output[n_rows][n_cols] 的输出中
        • 如果n_cols == 16,增加n_row++

      关于您的第二个问题,您可以:

      • 首先读取所有值,并将它们存储到一个数组中
      • 向数组添加新值时,将位数与当前最大位数进行比较
      • 将数组中的值复制到输出文本文件中,填充到最大位数

      【讨论】:

        猜你喜欢
        • 2015-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-11
        相关资源
        最近更新 更多