1

我在将以下数组写入 .txt 文件时遇到问题。

这是我的代码:

for i in range(len(my_particles)):
    list = []
    list.append(my_particles[i].n)
    for z in range(len(my_particles[i].neighbours)):
        list.append(my_particles[i].neighbours[z])

    #for i in range(len(list)):
    print >>f, list

f.close()

这是输出:

[0, 2, 20, 91, 114, 127]
[1, 6, 24, 114]
[2, 0, 65, 73, 91, 114]
[3, 71, 91, 120]
[4, 16, 69, 104]
[6, 1, 25, 87, 100, 114]
[7, 19, 83, 111]
[9, 38, 59, 72, 76]
[11, 56, 101, 108]
[12, 86, 92, 126]
[13, 30, 79, 82, 101, 104]
[14, 78, 103, 124]
[15, 23, 44, 90, 116]
[16, 4, 97, 106, 108]
[17, 19, 85, 111]
[18, 47, 60, 68, 74]

有没有办法以这种格式打印它?

0, 2, 20, 91, 114, 127
1, 6, 24, 114

我努力了

print>>f, "".join(list)

但它不起作用,因为它是一个 numpy64 浮点数列表。

4

6 回答 6

2

您想首先从列表的每个成员中创建字符串。尝试

print >>f, ', '.join(map(str,list))

另外,不要命名变量list

于 2013-07-30T15:05:19.210 回答
1

尝试

",".join(str(i) for i in list))
于 2013-07-30T15:08:37.483 回答
0

首先,您应该在处理文件时使用with 语句,以确保即使程序在完成之前遇到错误,它们也会自动关闭。其次,您可以将for i in range(len(my_list))andmy_list[i]替换为for i in my_listand i。此外,拥有一个名为的变量list会覆盖内置类型列表。通常的做法是使用尾随下划线来避免这种情况。

这段代码应该可以工作(虽然我目前没有安装 Numpy 来测试它)

with open("myfilename.txt","w") as f:
    for i in my_particles:
        list_ = []
        list_.append(i.n)

        for j in value.neighbours:
            list_.append(j)

        f.write(", ".join(str(n) for n in list_))

请注意,这将删除文件的先前内容。如果您不希望这样,请在打开函数中使用“a”而不是“w”打开文件。

于 2013-07-30T15:20:51.677 回答
0

如果 list 是一个 numpy 浮点数组:

list.astype('str')

或者-您也可以使用 csv 快速编写 np.arrays:

import csv
import numpy as np

a = np.random.uniform(0,10,size = (5,5))
writer = csv.writer(open('txtfile.txt','wb'))
writer.writerows(a)

生成txt文件:

3.55183065126,1.05649949199,5.15510365109,1.0369928554,7.66646909667
9.5145737219,1.53877245296,5.53917128683,1.55343228883,8.78227048275
5.80408228776,2.58788175555,0.502704494319,1.63833152952,3.59898531148
2.94430872526,2.42069917781,5.75920106752,2.42453222446,1.73308148034
1.9579612159,0.609573767011,3.87717828624,7.86853109668,7.41038950637

或者如果你想要整数,添加:

writer.writerows(a.astype(int))

会产生

2,0,3,4,1
9,5,4,4,3
9,7,6,4,2
3,5,7,2,0
6,0,2,7,7
于 2013-07-30T15:12:52.433 回答
0

将它们转换为字符串应该可以

print >>f, ', '.join(str(elem) for elem in my_list)

正如布赖恩所说,不要打电话给你的名单list

于 2013-07-30T15:12:01.447 回答
0

hacky修复:

print(str(list).replace(']','').replace('[',''))
于 2013-07-30T15:08:09.583 回答