【问题标题】:Converting multiple .dat files with binary data to .csv with same file name将具有二进制数据的多个 .dat 文件转换为具有相同文件名的 .csv
【发布时间】:2018-06-18 15:33:49
【问题描述】:

我有一个包含二进制数据的 .dat 文件的文件夹,我想解析并写入与 .dat 文件同名的 .csv 文件。我可以获取单个 .dat 文件并将其转换为相应的 .csv 到我需要的文件夹。

     import numpy as np
     import pandas as pd
     raw_file= '/home/targetfolder/channel1.dat'
     with open(raw_file, "rb") as f:

              raw_data = np.fromstring(f.read(), dtype=np.float32)
              comb_np_array = np.vstack(raw_data)
              big_frame = pd.DataFrame(comb_np_array)
              big_frame.to_csv("/home/destinationfolder/channel1.csv")

     f.close()

'filename.csv 中的输出 0,-47.418867 1,-47.443828 2,-47.4445311 3,-47.4738281 4,-47.4193871 5,-47.4222221 6,-47.4193878

这是我遵循的链接:Python: How to save *.dat-files as *.csv-files to new folder

    import csv
    from os import listdir
    from os.path import isfile, join, splitext

    dat_folder = "/home/nri/"
    csv_folder = "/home/nri/tmp/"

     onlyfilenames = [f for f in listdir(dat_folder) if 
                      isfile(join(dat_folder,f))]
     for fullfilename in onlyfilenames:
          file_name, file_extension = splitext(fullfilename)
          if file_extension == ".dat":
              inputfile=dat_folder + fullfilename
              with open(inputfile, "rb") as f:

                   inputfile = np.fromstring(f.read(), dtype=np.float32)
                   comb_np_array = np.vstack(raw_data)
                   n = pd.DataFrame(comb_np_array)

             with open(join(csv_folder, file_name + ".csv"), "w", 
                            newline='') as f:
                    writer = csv.writer(f,lineterminator='\n')
                    for row in range(len(n)):
                          writer.writerows(n)

但是上面给出了一个错误:“sequence expected”。请让我知道如何获得所需的结果。

【问题讨论】:

标签: python pandas csv binary


【解决方案1】:

您正在迭代 len(n) 但每次都写入 n。

for row in range(len(n)):
    writer.writerows(n)

writerows 接受序列序列,但是您正在传递一个数据帧并期望编写器对其进行迭代,但是在您的情况下数据帧不是序列(python 2?)。 Here is how you can check this.

>>> import collections
>>> isinstance(big_frame, collections.Sequence)
False

您需要iterate over the data frame 并写入单元格,

for i, row in big_frame.iterrows():
    writer.writerow([i, row[0]]) # 0 is the col name here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    相关资源
    最近更新 更多