繁体   English   中英

将由竖线(竖线分隔)分隔的格式化数据保存到 Python 中的文件中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM