Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将每行的多个数组元素打印到文本文件中_Python_List_Output_Text Files - Fatal编程技术网

Python 如何将每行的多个数组元素打印到文本文件中

Python 如何将每行的多个数组元素打印到文本文件中,python,list,output,text-files,Python,List,Output,Text Files,我有一个1D数组,例如任意长度的arr1=[1,2,3,4,5,6,7,8,9,10,11,12,13,14] 如何将其打印到文本文件(整数/浮点数用空格分隔),以便每7个元素都打印在文本文件的同一行上 因此,我希望文本文件如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 第1行:1234567 第2行:89101121314 >>> [arr1[7 * i: 7 * i + 7] for i in range(

我有一个1D数组,例如任意长度的
arr1=[1,2,3,4,5,6,7,8,9,10,11,12,13,14]

如何将其打印到文本文件(整数/浮点数用空格分隔),以便每7个元素都打印在文本文件的同一行上

因此,我希望文本文件如下所示:

1 2 3 4 5 6 7 
8 9 10 11 12 13 14 
15 16 17 18 19 
第1行:
1234567

第2行:
89101121314

>>> [arr1[7 * i: 7 * i + 7] for i in range(0, 1 + len(arr1) / 7)]
[[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14], [15]]
然后,您只需在此列表中进行迭代,即可将其插入文件。

您可以执行以下操作:

liNums = xrange(1, 20)
x = 0
line = ""
for i in liNums:
    x+=1
    line += "%s " % i
    if not x%7:
        line += "\n"
#send line to output, here I will just print it
print line
这里每7项添加一行。。。输出如下所示:

1 2 3 4 5 6 7 
8 9 10 11 12 13 14 
15 16 17 18 19 
希望有帮助

>>> arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> for i in xrange(0,len(arr1),7):
...     print arr1[i:i+7]
... 
[1, 2, 3, 4, 5, 6, 7]
[8, 9, 10, 11, 12, 13, 14]
或者你可以:

>>> arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> results = map(str,arr1)
>>> for i in range(0,len(arr1),7):
...     ','.join(results[i:i+7])
... 
'1,2,3,4,5,6,7'
'8,9,10,11,12,13,14'
或者

将嵌套的
join
s与
izip
技术相结合:

print '\n'.join((' '.join(j) for j in izip(*[imap(str, arr1)]*7)))

您可以使用以下
zip
习惯用法对序列进行分块:

from itertools import izip

def chunk(seq, n):
    return izip(*[iter(seq)]*n)
然后,您可以为
写线
编写迭代器:

def chunkedlines(seq, n):
    for line in chunk(seq, 7):
        yield ' '.join(str(item) for item in line)
        yield "\n"
最后使用它:

from StringIO import StringIO
fp = StringIO('wb')

arr1 = range(1, 15)

fp.writelines(chunkedlines(arr1, 7))

print fp.getvalue()

您的问题可分为三个部分:

  • 如何将任意大小的列表划分为特定长度的块
  • 如何使用空格作为分隔符打印整数/浮点列表
  • 如何写入文件
  • 将任意大小的列表划分为特定长度的块 使用
    grouper
    方法,如中所述:

    您可以轻松地将任意长度的列表拆分为所需长度的块。例如:

    >>> arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
    >>> for chunk in grouper(7, arr1): print chunk
    ... 
    (1, 2, 3, 4, 5, 6, 7)
    (8, 9, 10, 11, 12, 13, 14)
    (15, 16)
    
    使用空格作为分隔符打印整数/浮点列表 将列表加入字符串的标准方法是使用。但是,这只适用于字符串列表,因此我们需要首先将每个元素转换为其字符串表示形式。这里有一个方法:

    >>> a = [1, 2, 3, 4]
    >>> print " ".join(str(x) for x in a)
    1 2 3 4
    
    在上一个示例中使用此方法,我们得到:

    >>> for chunk in grouper(7, arr1):
    ...   print " ".join(str(x) for x in chunk)
    ... 
    1 2 3 4 5 6 7
    8 9 10 11 12 13 14
    15 16
    
    这几乎就是你想要的输出。现在我们需要做的就是把它写入一个文件

    写入文件 有关详细信息,请参见。

    在Python中,考虑“生成器”

    结果

    1    2    3    4    5    6    7    
    8    9    10   11   12   13   14   
    101  203  514  201  567  849 
    
    如果要参数化每行中的数字数量,请创建一个生成器函数:

    def yn(li,n):
        for i,x in enumerate(li,1):
            yield '%-5s ' % x
            if i%n==0:
                yield '\n'
    
    print ''.join(yn(li,7))
    

    可能最好将其作为生成器表达式,而不是列表理解。我认为如果
    len(arr1)%7==0
    ,这并不能满足您的需要。尝试
    (6+len(arr1))/7
    。是的:如果
    arr1=[1,2,3,4,5]
    ,它会给出
    [[1,2,3,4,5]]
    。还是我误解了你?很简单,这比重型机械好。您可以通过对范围(0,len(arr1),7)内的i执行
    '\n'.join(','.join(结果[i:i+7])
    来提高写入速度。您有一个很好的算法(我有相同的!)。使用生成器和
    enumerate()
    您将获得Python精神。我明白您的意思,请留下这行代码,而不是仅仅追加\n当我回答这个问题时,我写下了这个问题会突然出现在我脑海中的第一件事:p
    izip(*[iter(seq)]*n)
    Phew!!我不知道它是否很快,但它很棘手!它之所以有效,是因为
    [iter(seq)]*n
    创建了一个长度
    n
    的列表,所有元素都等于同一迭代器。
    with open("outfile.txt", "w") as f:
      for chunk in grouper(7, arr1):
        f.write(" ".join(str(x) for x in chunk) + "\n")
    
    output=''
    col = 0
    for i in arr1:
        output +="%s " % i #write an element of the array to the output and append a space
        col += 1 #count the number of elements on the current line
        if col==7: #if 7 elements have been entered, append a new line and restart the count
            output += "\n"
            col = 0
    
    f = open("filepath.txt",'w') #open a file (replace filepath.txt with the actual filename)
    f.write(output) # write the output to the text file
    f.close() #close the file object
    
    li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,101,
          203,514,201,567,849]
    
    gen = ('%-5s\n' % x if i%7==0 else '%-5s' %x
           for i,x in enumerate(li,1))
    
    print ''.join(gen)
    
    1    2    3    4    5    6    7    
    8    9    10   11   12   13   14   
    101  203  514  201  567  849 
    
    def yn(li,n):
        for i,x in enumerate(li,1):
            yield '%-5s ' % x
            if i%n==0:
                yield '\n'
    
    print ''.join(yn(li,7))