我有一个非常基本的问题。我编写了一个代码,打开一个包含数字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()
答案 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
循环可以解释为,
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()