【问题标题】:Python: Removing specific char while writing in .csv filePython:在.csv文件中写入时删除特定字符
【发布时间】:2020-08-20 16:53:37
【问题描述】:

我需要将列表作为值的字典写入 CSV。 输入如下:

d = {'a': [1.11, 2.22, 3.33],
     'b': [4.44, 5.55, 6.66],
     'c': [7.77, 8.88, 9.99]}

输出应如下所示:

a    1.11    2.22    3.33
b    4.44    5.55    6.66
c    7.77    8.88    9.99

我的代码是

with open('Test.csv', 'w') as f:
    for key in d.keys():
        f.write("%s,%s\n"%(key,d[key]))

哪些输出:

a    [1.11    2.22    3.33]
b    [4.44    5.55    6.66]
c    [7.77    8.88    9.99]

如何修改我的代码以删除存储到 csv 文件中的括号?我知道我可以稍后浏览文件并删除括号,但我想在写信之前或写信时这样做。

【问题讨论】:

    标签: python csv dictionary


    【解决方案1】:

    试试:

    for key, values in d.items():
        f.write("%s %s\n"%(key, " ".join([str(v) for v in values])))
    

    你不能只join() d[key],因为它们是数字,必须转换为字符串。

    但是,由于您说您需要 CSV,因此我并不认为您希望它像您所展示的那样以空格分隔。如果你想用逗号分隔,那么它将是:

    for key, values in d.items():
        f.write("%s, %s\n"%(key, ", ".join([str(v) for v in values])))
    

    [编辑]

    我应该澄清为什么您在原始代码中得到了“[”和“]”。

    在您的代码中,d[key] 的内容是一个列表。当你告诉 python 打印一个列表时,它会打印列表的元素,用逗号分隔并用左方括号和右方括号括起来,以表明正在打印的东西是一个列表。

    答案通过使用分解列表来避免这种情况

    for v in values
    

    然后用 join() 将它们重新组合在一起。

    【讨论】:

      【解决方案2】:

      这是我尝试删除数据框列中特定字符的代码。

      FILE_PATH = "***.csv"
      DONE_PATH = "done.csv"
      SPECIFIC_COL = "SPECIFIC_COL"
      REMOVE_CHAR = 'Â'
      
      df = pd.read_csv(FILE_PATH,encoding='utf-8')
      df[SPECIFIC_COL] = df[SPECIFIC_COL].str.replace(,'')
      
      # Before writing to the csv, check if it exists or not
      try: 
          os.remove(DONE_PATH)
      except OSError:
          pass
      
      df.to_csv(DONE_PATH)
      

      【讨论】:

        【解决方案3】:

        我运行了你的代码,结果是:

        a,[1, 2, 3]
        b,[4, 5, 6]
        c,[7, 8, 9]
        

        所以,这不是最干净的方法,但它有效:

        with open('Test.csv', 'w') as f:
            for key in d.keys():
                f.write("%s"%(key))
                for k in d[key]:
                    f.write(" %s"""%k)
                f.write("\n")
        
        a 1 2 3
        b 4 5 6
        c 7 8 9
        

        【讨论】:

          【解决方案4】:

          d[key] 是一个列表,您可以将其与空格字符连接以获得您想要的字符串:

          f.write("%s,%s\n"%(key, " ".join(d[key])))
          

          顺便说一句,如果你打算做 CSV,看看标准模块: https://docs.python.org/3/library/csv.html

          【讨论】:

          • 我稍微编辑了问题以反映浮点数而不是整数。这是我得到的错误:TypeError: sequence item 0: expected str instance, float found
          • 这个 " ".join(d[key]) 将不起作用,因为 dict 条目中的值是数字列表,而 join() 需要字符串。正如我的回答一样,它们需要转换为字符串。不过,使用 CSV 模块的建议是个好主意。
          猜你喜欢
          • 2013-06-15
          • 2018-12-14
          • 2021-08-09
          • 2013-03-22
          • 2020-10-07
          • 1970-01-01
          • 2021-05-26
          • 2021-07-15
          • 1970-01-01
          相关资源
          最近更新 更多