[英]Saving formatted data separated by vertical bars(pipe-delimited) to a file in Python
# Get the filepath from the command line
import sys
F1= sys.argv[1]
F2= sys.argv[2]
"""load the two files for processing"""
action_log=[]
#open first file
with open(F1, 'r') as accounts_file:
main_log = accounts_file.read().splitlines()
split_main_log = [word.split('|') for word in main_log]
#open second file
with open(F2, 'r') as command_file:
command_log = command_file.read().splitlines()
split_command_file = [word.split('|') for word in command_log]
for i in range(0, len(split_command_file)):
if (split_main_log[i][1] == split_command_file[i][3] and split_command_file[i][0] == 'sub'):
if split_main_log[i][2] >= split_command_file[i][1]:
split_main_log[i][2] = int(split_main_log[i][2]) - int(split_command_file[i][1])
elif split_main_log[i][1] == split_command_file[i][3] and split_command_file[i][0] == 'add':
split_main_log[i][2] = int(split_main_log[i][2]) + int(split_command_file[i][1])
for i in range(0,len(split_main_log)):
split_main_log[i] = str(split_main_log[i])
for i in range(0,len(split_main_log)):
split_main_log[i]='|'.join(split_main_log[i])
output_new = ""
output_new = "\n".join(split_main_log)
out_file = open(F1,'w') #openfile
out_file.write(output_new)
我不确定为什么我的 output 有这么多竖线。 我只是忽略了一些东西,需要另一只眼睛(已经看了几个小时)。 任何帮助都是极好的。
使用 csv 怎么样? 并简单地告诉 csv 编写器使用 pipe 符号作为分隔符?
import csv
with open("test.csv", "w", newline='') as csv_file:
csv_writer = csv.writer(csv_file, delimiter='|')
csv_writer.writerow(["ColumnName1", "ColumnName2", "ColumnName3"])
for i in listOfDictionary:
csv_writer.writerow([i["key1"], i["key2"], i["key3"]])
代码插入|
在每个字符之间,因为它将str
作为参数传递给join
。 str.join
方法将一个序列作为参数并返回一个str
,它是由名为join
的实例分隔的序列的每个元素。 您可以通过运行'|'.join('foobarbaz')
为自己演示这一点。
您可以先将此强制转换为str
:
for i in range(0,len(split_main_log)):
split_main_log[i] = str(split_main_log[i])
这可能会中断str.join
调用,因为您在父for
循环中将值转换为int
。 完成算术运算后,您需要将这些值转换为str
,如下所示:
for i in range(0, len(split_command_file)):
if (split_main_log[i][1] == split_command_file[i][3] and split_command_file[i][0] == 'sub'):
if split_main_log[i][2] >= split_command_file[i][1]:
split_main_log[i][2] = str(int(split_main_log[i][2]) - int(split_command_file[i][1]))
elif split_main_log[i][1] == split_command_file[i][3] and split_command_file[i][0] == 'add':
split_main_log[i][2] = str(int(split_main_log[i][2]) + int(split_command_file[i][1]))
请提供最低限度的可重现样品,我可以提供更多帮助。 如果没有输入文件,很难调试它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.