使用Python逐列写入.txt文件

1 python networkx

如何将新数据列附加到现有.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])
Run Code Online (Sandbox Code Playgroud)

现在我如何让程序为每个字典开始一个新列?

ale*_*xis 5

文本文件按顺序存储; 第二行从第一行结束开始.您可以在中间修改材料,但是要添加一个字符(或者甚至删除一个字符),您需要读取后面的所有内容并将其再次写入文件中的新偏移量.换句话说,您必须读取和写出整个文件,或者像其他人建议的那样使用不同的存储模型(例如,数据库).

如果你真的必须按列向文件中添加信息,你可以通过写出固定长度的行来填充空格; 然后,您搜索文件并用新数据覆盖一些空格.我不会提供代码,因为这是一种可怕的方法:固定长度的记录在20世纪70年代出现了.在你的情况下,我真的不认为这是必要或适当的.

查看代码,我认为您不需要将列添加到文件中.我认为最好的解决方案实际上是在二维数组中收集值,这样你就可以在完成时以所需的格式一次性写出它们.除非你有数千兆字节的积分,否则没有理由一次将它们写出一列.

编辑:既然你喜欢数组的想法,这里是如何创建它并轻松写出来的:

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])))
Run Code Online (Sandbox Code Playgroud)

"二维数组"实际上是一个列表字典,与您的版本保持一致.(我认为所有返回的词典都具有完全相同的键.)代码使用两个方便的python功能:defaultdict该类省去了在记录第一列时显式创建每个数组行的麻烦.输出代码将五个值连接到一个以制表符分隔的字符串中以进行输出.

另请注意,除非您对字典的键进行排序,否则您将按照仲裁顺序对其进行排序 - 通常不是您想要的输出.