如何将新的数据列附加到现有的 .txt 文件?基本上,我生成了 5 个词典,每次生成一个词典时,我都想将值写入新列中的主文本文件。我将显示我的代码,即使您无法运行它,因为它调用了我编写的另一个程序:
# Import personal module
import graphGenerator as gg
# Open file for writing data to
case=open(r'J:\FOIL\mediansandmeans.txt','w')
# Run code
for i in range(5):
# create a graph using NetworkX and a code I wrote to read in an edgelist from a txt file
G=gg.graph_creator(i+1)
# calculate degree of all nodes using NetworkX--returns a dictionary
d=nx.degree(G,weighted=True)
# print dictionary values to text file
for j in d.keys():
case.write('%s\n' % d[j])
现在如何让程序为每本词典开始一个新列?
最佳答案
文本文件是顺序存储的;第二行从第一行结束的地方开始。您可以修改中间的 Material ,但即使要添加一个字符(或删除一个字符),您也需要读取后面的所有内容并将其重新写入文件中的新偏移量。换句话说,您必须读取和写入整个文件,或者按照其他人的建议使用不同的存储模型(例如数据库)。
如果您真的必须按列向文件添加信息,您可以通过写出固定长度的行来完成,用空格填充;然后您搜索文件并用新数据覆盖一些空间。我不会提供代码,因为这是一种糟糕的方法:固定长度的记录在 1970 年代就出现了。而且我真的认为您的情况没有必要或不合适。
查看您的代码,我认为您不需要向文件中添加列。我认为最好的解决方案实际上是将值收集到一个二维数组中,这样您就可以在完成后以所需的格式一次性将它们全部写出。除非您有千兆字节的点数,否则没有理由一次将它们写出一列。
编辑:既然您喜欢数组的想法,下面是创建它并轻松写出它的方法:
from collections import defaultdict
degrees = defaultdict(list)
for i in range(5):
G=gg.graph_creator(i+1)
d=nx.degree(G,weighted=True)
for j in d.keys():
degrees[j].append(d[j])
for k in sorted(degrees.keys()):
case.write("%s: %s\n" % (k, "\t".join(degrees[k])))
“二维数组”实际上是一个列表字典,与您的版本保持一致。 (我认为所有返回的字典都具有完全相同的键。)该代码使用了两个方便的 python 功能: defaultdict
类为您省去了在记录第一列时显式创建每个数组行的麻烦。输出代码将这五个值连接成一个以制表符分隔的字符串以供输出。
另请注意,除非您对字典的键进行排序,否则您将以任意顺序获得它们——通常不是您想要的输出结果。
关于python - 使用 Python 逐列写入 .txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16720127/