我一直在环顾四周,找不到答案,所以在这里。
我正在尝试自动将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时,它只显示3而不是我需要的四行。将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']也是如此。如何删除这些?
答案 0 :(得分:0)
我不明白为什么如果你有4000多件,你可以以编程方式进行编写,只需将每一篇文章写成新的一行?
在我看来,最简单的方法,但不是自动的,是Notepad ++之类的编辑。
在这里你可以替换","通过" \ r \ n"或者如果你想保留","你用",\ r \ n"。
替换它如果你想让它自动化,我就不会看到一种不那么规划的方式。
顺便说一下......如果你使用python和numpy / scipy,你可以使用.transpose()函数
*编辑您的评论:
你是什么意思"从第一个分到512个"?如果你想要尺寸为512的零件,那就像是:
new_array = []
temp_array = []
k = 0
for num in your_array:
temp_array.append(num)
k += 1
if k % 512 == 0:
new_array.append(temp_array)
k = 0
temp_array = []
#to append the last block which might not be 512 sized
if len(temp_array) > 0:
new_array.append(temp_array)
# Save Arrays
for i in len(new_array):
saveToCsv(array = new_array[i], name="csv_"+str(i))
你的new_array现在是一个填充512个大小数组的数组。 可能是错误,我没有测试代码。要保存您只需要一个函数saveToCsf(array,name),它将数组保存到文件中。