按行拆分数组

时间:2015-03-29 10:36:30

标签: python split

我有一个非常基本的问题。我编写了一个代码,打开一个包含数字1 2 3 4 5 6 7 8 9的.txt文件。然后它将所有文件都放到一边并写入其他文件。 现在我想添加这个代码程序,它将所有这些数字分成行并重写,如下所示:

1 4 9
16 25 36
49 64 81

我的代码已经:

n=[]
dane = open("num.txt", "r")

for i in dane:
  i = i.replace('\n','')
  for j in i.split(' '):
        j = int(j)
        j = j**2
        n.append(j)

nowy = open("newnum.txt","w")
nowy.write(str(n))
nowy.close()

4 个答案:

答案 0 :(得分:2)

你写的代码对写作部分的期望很好。您需要将最后三行代码更改为

nowy = open("newnum.txt","w")
for i in range(0,len(n),3):
    nowy.write("{} {} {}\n".format(n[i],n[i+1],n[i+2]))
nowy.close()

for循环可以解释为,

  • 使用名为step的n函数的第三个参数循环遍历您一次生成3个列表range
  • 一次将三个值写入文件,由换行符
  • 终止

更改代码行后的输出符合预期

1 4 9
16 25 36
49 64 81

参考:

答案 1 :(得分:1)

作为@Bhargav答案的补充,according to the doc " [a]使用{{1}将数据系列聚类成n长度组的可能习惯用法}"

您可以使用 star 将列表/元组解压缩为zip(*[iter(s)]*n)函数调用的参数。

所有这些都会导致写作部分的更多Pythonic(或者更确切地说是加密 - Pythonic?)版本:

format

请注意在退出块时使用上下文管理器(with open("newnum.txt","w") as nowy: for sublist in zip(*[iter(n)]*3): nowy.write("{} {} {}\n".format(*sublist)) 语句)以确保在所有情况下正确关闭文件 。由于其他更改需要进行讨论,以后是必须 - 您应该明确地养成使用它的习惯 (BTW,您是否注意到您从未关闭with文件?使用上下文管理器来管理该资源可以避免的一个简单错误......)

答案 2 :(得分:0)

你可以试试这个:

strNew = ''
dane = open("num.txt", "r")
row = 0
for i in dane:
  i = i.replace('\n','')
  for j in i.split(' '):
    row += 1
    j = int(j)
    j = j**2
    if (row % 3) == 0:
        strNew += str(j)+'\n'
    else:
        strNew += str(j) + ' ' # it can be ' ' or '\t'

nowy = open("newnum.txt","w")
nowy.write(strNew)
nowy.close()

结果是:

1 4 9
16 25 36
49 64 81

答案 3 :(得分:0)

n=[]
dane = open("num.txt", "r")

for i in dane:
  i = i.replace('\n','')
  for j in i.split(' '):
        j = int(j)
        j = j**2
        # new code added
        # why str(j)? Because array in Python can only have one type of element such as string, int, etc. as opposed to tuple that can have multiple type in itself. I appended string because I wanna append \n at the end of each step(in outer loop I mean)
        n.append(str(j))

  # new code added
  n.append("\n")

nowy = open("newnum.txt","w")
nowy.write(str(n))
nowy.close()