【问题标题】:Processing multiple files and write a csv file for each处理多个文件并为每个文件编写一个csv文件
【发布时间】:2020-06-03 23:51:04
【问题描述】:

我编写了一个适用于单个文件的代码,但我必须更改每个文件的名称。它读取一个 pickle 文件,将其写入 txt 文件,然后对 txt 文件的上下文进行一些处理并生成一个数字列表,最后将列表存储在数据帧中并将该数据帧写入 csv 文件。

def get_value_of_list(bit_list):
p_number = 0
for i in bit_list:
    if i == 1:
        p_number = p_number + 1
return p_number

def cross_entropy(p, q):
    return -sum([p[i] * log2(q[i]) for i in range(len(p))])

if __name__ == "__main__":

file_name = 'pickleData_AIMchat2.txt'
pickle_file = 'AIMchat2.pickle'
pk = PickleToFile(file_name, pickle_file)
pk.create_pickle_file()
h = HexToBinary(file_name)
hex_list = h.read_file()
num_of_bits = 8

scale = 16
bin_data = []
for i in hex_list:
    bin_data.append(bin(int(i, scale))[2:].zfill(num_of_bits))

my_bit_list = []
for byte in bin_data:
    bit_list = []
    for bit in byte:
        bit_list.append(int(bit))
    num_of_one_divided_by_eight = get_value_of_list(bit_list) / 8
    my_bit_list.append(num_of_one_divided_by_eight)

cross_entropy_list = []
i = 0
while i < len(my_bit_list):
    cross = cross_entropy([my_bit_list[i]], [my_bit_list[i + 1]])
    cross_entropy_list.append(cross)
    i = i + 2

df = pd.DataFrame(cross_entropy_list)
df.to_csv(r'AIMchat2.csv', index=False, index_label=False, chunksize=1000000, header=False)

我已经把create_pickle_file()改成下面的代码来读取目录下的文件:

class PickleToFile:
    def __init__(self, name, pickle_file):
    self.name = name
    self.pickle_file = pickle_file

    def create_pickle_file(self):
    basepath = Path()
    files_in_basepath = basepath.iterdir('pickle/')
    for item in files_in_basepath:
        if item.is_file():
            checkThePickle = open(self.pickle_file, "rb")
            with open(self.name, 'w') as filehandler:
                for listItem in checkThePickle:
                    filehandler.write('%s\n' % listItem)

但由于在读取文件后将其写入文本文件,然后写入 csv 文件,我不知道该怎么做。感谢任何建议。

【问题讨论】:

  • 您要更改“pickleData.txt”的名称吗?使用“输入”语句将允许您在命令行上指定一个文件。或者,如果您愿意,可以使用该输入字符串,并对其进行修改以创建新的输出文件名;即如果 input_file="file1.txt",你可以创建 output_file = input_file + "_output.txt" 等。有更巧妙的方法,但这是你需要的吗?
  • @asylumax pickleData.txt 有点像输入文件,因为在此过程中会从中读取所有数据,但最后我不需要它,我只需要.csv 文件。所以我想自动化读取pickle文件和生成csv文件的过程。
  • 对你想要什么还是有点困惑。您想消除中间的 .txt 文件吗?您能否更新问题以显示您的流程?
  • @asylumax 当然,我现在将整个代码。我不想删除那个 txt 文件,它是用于我在问题中解释的所有过程的文件。
  • 解决方案草图:将所有泡菜文件放在一个目录中。让 python 打开该目录,并获取所有这些文件的列表。有一个处理泡菜文件的函数,然后使用该函数遍历该文件列表。

标签: python csv pickle


【解决方案1】:

如果您希望获取目录中的文件列表并对其进行处理,这应该可以满足您的需求:

How do I list all files of a directory?

一旦你有了这个文件列表,做一个循环:

for each in list_of_files:
    process_function(each)

然后,你就在路上,'process_function' 是函数,参数是文件名。

【讨论】:

    猜你喜欢
    • 2019-10-11
    • 1970-01-01
    • 2020-10-06
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 2015-05-23
    相关资源
    最近更新 更多