Python 如何在文件中保存两列数组
How to save two-column array in a file in Python
我有这段代码(参见 )用于在文件中保存两列数组。问题是我需要调用这个函数 N 次:
def save(self):
n=self.n
with open("test.csv","a") as f:
f.write("name\tnum\n")
for k, v in tripo.items():
if v:
f.write(n+"\t")
f.write("{}\n".format(k.split(".")[0]))
for s in v:
f.write(n+"\t")
f.write("\n".join([s.split(".")[0]])+"\n")
这是 tripo
的示例内容 for n=1:
{
'1.txt': [],
'2.txt': [],
'5.txt': [],
'4.txt': ['3.txt','6.txt'],
'7.txt': ['8.txt']
}
这是 n=1...N 的预期输出:
name num
1 4
1 3
1 6
1 7
1 8
...
N 3
N 6
N ...
但是,上面给出的代码将一些值放在同一列中。
更新:
例如,如果我有这个字符串 '170.txt': ['46.txt','58.txt','86.txt']
,那么我会收到这个结果:
1 1 1 1 170
46
58
86
而不是:
1 170
1 46
1 58
1 86
使用Pickle。使用 pickle.dump 存储到文件并使用 pickle.load 加载它。
我不太明白你的问题。
是否对象表示正确但文件中的写法不正确?
如果是 Dan 所说的情况,使用 pickle 可能会有用。
import pickle;
s = pickle.dumps(object);
f.write(s);
f.close();
#for reading;
f = open('test.csv', 'rb');
serialized_object = pickle.load(f)
serialized_object
变量应具有您要保留的结构。
import os
tripo = [
('1.txt', []),
('2.txt', []),
('5.txt', []),
('4.txt', ['3.txt','6.txt']),
('7.txt', ['8.txt'])
]
def getname(f):
return os.path.splitext(f)[0]
def getresult(t):
result = []
for k, v in tripo:
values = [getname(n) for n in v]
if len(values)>0:
result.append(getname(k))
for x in values:
result.append(x)
return result
def writedown(n,r):
with open("test.csv","a") as f:
for x in r:
f.write("%s\t%s\n" % (n,x))
print("%s\t%s\n" % (n,x))
print(getresult(tripo))
writedown(1, getresult(tripo))
我有这段代码(参见
def save(self):
n=self.n
with open("test.csv","a") as f:
f.write("name\tnum\n")
for k, v in tripo.items():
if v:
f.write(n+"\t")
f.write("{}\n".format(k.split(".")[0]))
for s in v:
f.write(n+"\t")
f.write("\n".join([s.split(".")[0]])+"\n")
这是 tripo
的示例内容 for n=1:
{
'1.txt': [],
'2.txt': [],
'5.txt': [],
'4.txt': ['3.txt','6.txt'],
'7.txt': ['8.txt']
}
这是 n=1...N 的预期输出:
name num
1 4
1 3
1 6
1 7
1 8
...
N 3
N 6
N ...
但是,上面给出的代码将一些值放在同一列中。
更新:
例如,如果我有这个字符串 '170.txt': ['46.txt','58.txt','86.txt']
,那么我会收到这个结果:
1 1 1 1 170
46
58
86
而不是:
1 170
1 46
1 58
1 86
使用Pickle。使用 pickle.dump 存储到文件并使用 pickle.load 加载它。
我不太明白你的问题。
是否对象表示正确但文件中的写法不正确?
如果是 Dan 所说的情况,使用 pickle 可能会有用。
import pickle;
s = pickle.dumps(object);
f.write(s);
f.close();
#for reading;
f = open('test.csv', 'rb');
serialized_object = pickle.load(f)
serialized_object
变量应具有您要保留的结构。
import os
tripo = [
('1.txt', []),
('2.txt', []),
('5.txt', []),
('4.txt', ['3.txt','6.txt']),
('7.txt', ['8.txt'])
]
def getname(f):
return os.path.splitext(f)[0]
def getresult(t):
result = []
for k, v in tripo:
values = [getname(n) for n in v]
if len(values)>0:
result.append(getname(k))
for x in values:
result.append(x)
return result
def writedown(n,r):
with open("test.csv","a") as f:
for x in r:
f.write("%s\t%s\n" % (n,x))
print("%s\t%s\n" % (n,x))
print(getresult(tripo))
writedown(1, getresult(tripo))