python - 使用 Python 逐列写入 .txt 文件

标签 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])

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

最佳答案

文本文件是顺序存储的;第二行从第一行结束的地方开始。您可以修改中间的 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/

相关文章:

python - 如何使用 opencv python 调整亮度、对比度和振动度?

python - 透明网络边缘标签

python - 使用 NetworkX 将图形导出到带有节点位置的 graphml

python - Matplotlib + NetworkX - 在单个图形中绘制 2 个网络

python - python 2.5 中的套接字错误处理与 2.7 中的不同吗?

python - 如何在 Tornado 网络服务器内找到阻塞调用?

python - 将数据帧写入 pandas 中的 csv 时,选项卡未显示

python - 根据递减值计算新值

python - 使用 networkx 将图形转换为完整图形的最快方法

python - 为什么我得到相同的图表?