【发布时间】:2017-10-09 09:57:29
【问题描述】:
我环顾四周,找不到答案,所以就在这里。
我正在尝试寻找一种自动将 CSV 文件的内容更改为其他内容以用于机器学习目的的方法。我有这样一行的内容:
0, 0, 0, -2.3145, 5.567...... 65, 65, 125, 70.
(516 列)
并尝试将其更改为:
0,
0,
-2.3145,
5.567
....
65,
65,
125,
70.
(516 行)
所以基本上将数据从水平转换为垂直(单行到单列)。
使用 Excel 可以轻松完成,但问题是我有 4000 多个 CSV 文件,因此需要很长时间。
最重要的是,我必须获取前 512 行并将其存储到另一个文件夹的 CSV 中,将最后 4 行添加到另一个文件夹的另一个 CSV 中,同时两个文件具有相同的名称。
例如: 功能(文件夹) 1.CSV 2.CSV ...... 4000+.CSV
标签(文件夹) 1.CSV 2.CSV ...... 4000+.CSV
关于如何加快速度有什么建议吗?尝试编写我自己的程序,但我很难将它从行更改为列。我只设法将单个 CSV 文件拆分为 4000 多份。
编辑:
我已经通过将 csv 行放入一个数组然后将该数组存储到 csv 中进行测试,其中代码如下所示:
with open('FFTMIM16_512L1H1S0D0_1194.csv', 'r') as f:
reader = csv.reader(f)
your_list = list(reader)
print(your_list[0:512])
print(your_list[512:516])
print(your_list)
with open('test.csv', 'w', newline = '') as fa:
writer = csv.writer(fa)
writer.writerows(your_list[0:511])
with open('test1.csv', 'w', newline = '') as fb:
writer = csv.writer(fb)
writer.writerows(your_list[512:516])
它可以工作,但我只需要循环运行它。我不明白的一个问题是,如果我在 test.csv 上保存 0 到 512 的值,它会显示 512 行,但是当我从 513 到 516 存储到 test1.csv 时,它只显示三个而不是我需要的四行。将 fb 内容从 512 更改为 516 将起作用,这对我来说没有意义,因为 test.csv 中 512 的值为 0,而 test1.csv 为 69。为什么会这样?据我了解是数组的索引,它从0开始到我需要的数字的位置。还是在python中不是这样?
编辑 2:
我的新代码如下:
import csv
import os
import glob
#import itertools
directory = input("INPUT FOLDER: ")
output1 = input("FEATURES FODLER: ")
output2 = input("LABELS FOLDER: ")
in_files = os.path.join(directory, '*.csv')
for in_file in glob.glob(in_files):
with open(in_file) as input_file:
reader = csv.reader(input_file)
your_list = (reader)
filename = os.path.splitext(os.path.basename(in_file))[0] + '.csv'
with open(os.path.join(output1, filename), 'w', newline='') as output_file1:
writer = csv.writer(output_file1)
writer.writerow(your_list[0:512])
with open(os.path.join(output2, filename), 'w', newline='' ) as output_file2:
writer = csv.writer(output_file2)
writer.writerow(your_list[512:516])
它显示了我想要的输出,但现在它存储了撇号和大括号,例如。 ['0.0']、['2.321223'] 也是如此。如何删除这些?
【问题讨论】:
标签: csv automation