我的问题是一个简单的问题(太简单了...)。我正在通过with
打开一个新的文本文件,并尝试将pandas.DataFrame
的每一行写入该文件。具体来说,我正在尝试将列条目放置在每行上非常特定的字符位置,因为这是接收我的文件的人所需的格式。
df 在下面的代码中代表我的pandas.DataFrame
。
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')
预期输出:
我希望我的最后一行放置一个管道,并用'\ n'将file
发送到下一行,以便对file.write()
的下一次调用将开始在下一行中写入条目。
实际输出:每行中的字符都在第一行上一遍又一遍地写在自己身上。可能值得注意的是,生成的文本文件确实的第二行为空。
总而言之,我只是试图写一行,转到下一行,写至该行,转到下一行,依此类推,等等。
答案 0 :(得分:1)
您似乎正在尝试编写固定宽度的列格式,并使用其他|
个字符作为分隔符。由于在Pandas(例如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)