代码之家  ›  专栏  ›  技术社区  ›  Joshua Schlichting

'\n'未发送文件.write()循环时使用seek()转到下一行

  •  0
  • Joshua Schlichting  · 技术社区  · 6 年前

    我的问题很简单(太简单……)。我正在通过打开一个新的文本文件 with 并尝试从 pandas.DataFrame

    测向 代表我的 1.数据帧

    with open(os.path.join(a_directory_var, 'folder/myfile.txt'), 'x') as file:
        for index, row in df.iterrows():
            file.seek(1)
            file.write(row['col1'])
            file.seek(56)
            file.write('|')
            file.seek(61)
            file.write(row['col2'])
            file.seek(76)
            file.write('|')
            file.seek(81)
            file.write('col3')
            file.seek(96)
            file.write('|\n')
    

    预期产量: file 使用'\n'转到下一行,以便下一次调用 file.write() 将开始向下一行写入条目。

    实际输出: 有空的第二行。

    1 回复  |  直到 6 年前
        1
  •  1
  •   9769953    6 年前

    | df.to_csv(fp, sep='|' ),您必须像这样迭代这些行,然后逐个编写它们。但不要分别编写每个部分:使用Python格式设置行的格式。

    例如,像这样的东西应该接近你想要的东西(由于我没有正确计算,所以会有一点偏移):

    sep = "|"
    with open(os.path.join(a_directory_var, 'folder/myfile.txt'), 'x') as fp:
        for index, row in df.iterrows():
            fp.write("{:56s}{:15s}{:15s}{:15s}{:15s}\n".format(
                row['col1'], sep, row['col2'], sep, row['col3'], sep)