【发布时间】:2018-08-21 20:11:24
【问题描述】:
我有一个包含 3000 多列的巨大 .CSV 文件,需要将它们加载到数据库中,并且由于表限制为 1024 列,我想将这些 .CSV 文件拆分为 1024 列或更少列的多个文件。
到目前为止,我在有关此主题的先前问题的帮助下尝试过什么 -
Python -
import csv
import file
input import os
source = 'H:\\Programs\\Exploratory Items\\Outdated\\2018\\csvs\\' for root, dirs, filenames in os.walk(source):
for f in filenames:
fullpath = os.path.join(source, f)
output_specifications = ( (fullpath[:-4] + 'pt1.csv', slice(1000)
(fullpath[:-4] + 'pt2.csv', slice(1000, 2000)),
(fullpath[:-4] + 'pt3.csv', slice(2000, 3000)),
(fullpath[:-4] + 'pt4.csv', slice(3000, 4000)),
(fullpath[:-4] + 'pt5.csv', slice(4000, 5000)), )
output_row_writers = [
(
csv.writer(open(file_name, 'wb'),
quoting=csv.QUOTE_MINIMAL).writerow, selector,
) for file_name, selector in output_specifications ]
reader = csv.reader(fileinput.input())
for row in reader:
for row_writer, selector in output_row_writers: row_writer(row[selector])
上述 python 代码的问题是拆分和写入这些文件需要很长时间,因为我的理解是按行写入。不适合我的情况,因为我有 200 多个 .CSV 文件,每个文件有 1000 多行。
现在试试 -
-cut 命令(POSIX),但我使用的是 Windows,所以将在 Ubuntu 平台上尝试这个。
想在 R 中试试这个:
我有一个代码可以将我的所有 SPSS 转换为 .csv,它可以有效地工作,所以我想在这个阶段添加更多内容,以便它可以将我的文件按列拆分为多个 .csv。
setwd("H:\\Programs\\2018")
getwd()
list.files()
files <- list.files(path = '.', pattern = '.sav')
library(foreign)
for (f in files) { #iterate over them
data <- read.spss(f, to.data.frame = TRUE, use.value.labels = FALSE )
write.csv (data, paste0(strsplit(f, split = '.', fixed = T)[[1]][1], '.csv'))
}
谢谢
参考 - Python code ref
【问题讨论】:
-
1024 列的限制究竟来自哪里?数据库?
-
第一个也是最重要的问题:为什么您的表有数千列?这既是数据库设计问题,也是数据集问题。大多数分析总是需要长格式(不是宽格式)。
-
这就是我接收数据以处理我无法控制的事情的方式。这仍然是 .CSV 格式,以便将它们加载到有 1024 个限制的数据库中,我想拆分它。 @parafait
-
@MichaelChirico 是的数据库
-
@vap0991 你能把这个csv的至少一部分上传到bpaste这样的地方吗?也许前 100 行之类的?