network={1:[2,3,4],2:[1,3,4], 3:[1,2], 4:[1,3,5], 5:[6,7,8], 6:[5,8],7:[5,6], 8:[5,6,7]}
str1='network.csv'
output = open(str1,'w')
for ii1 in network.keys():
output.write(repr(ii1)+":[")
for n in network[ii1]:
output.write(' %s,'%(repr(n)))
output.write('\b'+']\n')
output.close()
我期望的是:
1:[ 2, 3, 4]
2:[ 1, 3, 4]
3:[ 1, 2]
4:[ 1, 3, 5]
5:[ 6, 7, 8]
6:[ 5, 8]
7:[ 5, 6]
8:[ 5, 6, 7]
但我得到的是:
1:[ 2, 3, 4,]
2:[ 1, 3, 4,]
3:[ 1, 2,]
4:[ 1, 3, 5,]
5:[ 6, 7, 8,]
6:[ 5, 8,]
7:[ 5, 6,]
8:[ 5, 6, 7,]
我是新手....有人可以帮忙吗?
答案 0 :(得分:5)
"\b"
只需插入ASCII退格符;它不会从输出文件中删除刚刚写入的字符。这就是您的代码没有按预期运行的原因。
现在,要修复它,您可以替换
for ii1 in network.keys():
output.write(repr(ii1)+":[")
for n in network[ii1]:
output.write(' %s,'%(repr(n)))
output.write('\b'+']\n')
与
for ii1 in network.keys():
output.write(repr(ii1)+":[ ")
output.write(", ".join(map(repr, network[ii1])))
output.write(']\n')
或者,进一步改善,
for k, v in network.items():
print >>output, "%s:[ %s]" % (repr(k), ", ".join(map(repr, v)))
最后,如果键是简单整数,如示例所示,那么repr(k)
可以简化为k
。此外,如果字典中的值是整数列表或某些,那么整个", ".join(map(repr, v))
舞蹈可能是不必要的。
答案 1 :(得分:4)
使用str.join
生成逗号分隔值,以避免需要退格:
str.join(iterable)
返回一个字符串,该字符串是可迭代迭代中字符串的串联。元素之间的分隔符是提供此方法的字符串。
更简单的方法是,例如,list comprehensions迭代字典项:
>>> [output.write("%s:%s\n" % item) for item in network.items()]
答案 2 :(得分:1)
为什么不使用str(dict)
?
for k, v in network.iteritems():
output.write(str({k: v})[1:-1] + '\n')
答案 3 :(得分:0)
一般情况下,您无法删除文件中写入的字符。
然而,通过稍微重新设计代码,您可以获得:
network={1:[2,3,4],2:[1,3,4], 3:[1,2], 4:[1,3,5], 5:[6,7,8], 6:[5,8],7:[5,6], 8:[5,6,7]}
str1='network.csv'
output = open(str1,'w')
for ii1 in network.keys():
output.write(repr(ii1)+":[")
first=false
for n in network[ii1]:
if first:
first=false
else:
output.write(',')
output.write('%s'%(repr(n)))
output.write('\b'+']\n')
output.close()
答案 4 :(得分:0)
试试这个:
network={1:[2,3,4],2:[1,3,4], 3:[1,2], 4:[1,3,5], 5:[6,7,8], 6:[5,8],7:[5,6], 8:[5,6,7]}
str1='network.csv'
with open(str1, 'w') as output:
for ii1 in network.keys():
output.write(repr(ii1)+":[")
output.write(','.join(repr(n) for n in network[ii1]))
output.write(']\n')
network.csv
中的输出:
1:[2,3,4]
2:[1,3,4]
3:[1,2]
4:[1,3,5]
5:[6,7,8]
6:[5,8]
7:[5,6]
8:[5,6,7]
有些观点:
我正在使用with ... as ...:
。这可以保证文件正确关闭。
我正在使用','.join
创建以逗号分隔的列表。这是合并列表(或更确切地说,可迭代)字符串的“pythonic”方式。
答案 5 :(得分:0)
退格符是否实际上是“退格”可能取决于你正在使用的shell。
只需自己输出数据就可以更简单,更简单(也更合适)。
network={1:[2,3,4],2:[1,3,4], 3:[1,2], 4:[1,3,5], 5:[6,7,8], 6:[5,8],7:[5,6], 8:[5,6,7]}
output = open('network.csv','w')
for key,values in network.items():
str_values = [str(x) for x in values]
output.write('%s:[%s]' % (key,','.join(str_values))
output.close()