python - 如何使用 R 按列将 .csv 拆分为多个 .csv?

标签 python r csv

我有一个包含 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,它可以高效地工作,所以我想在此阶段添加更多内容,以便它可以按列将我的文件拆分为多个 .csvs。

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

最佳答案

迟到总比不到好:) 这是基于代码生成库的解决方案 - convtools

from convtools import conversion as c
from convtools.contrib.tables import Table


columns_per_file = 1000
for filename in filenames:
    # reading columns
    columns = Table.from_csv(filename, header=False).columns

    # slicing
    for part_number, i in enumerate(
        range(0, len(columns), columns_per_file), 1
    ):
        Table.from_csv(filename, header=False).take(
            # taking only needed ones
            *(col for col in columns[i : i + columns_per_file])
        ).into_csv(
            # streaming to the part
            "{}.pt{}.csv".format(filename.replace(".csv", ""), part_number),
            include_header=False,
        )

关于python - 如何使用 R 按列将 .csv 拆分为多个 .csv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49258407/

相关文章:

python - 为 Python turtle 提供一个用于乒乓球比赛的矩形形状

r - 如何删除 .png 周围奇怪的白边(用 r、ggplot 绘制)?

r - 如何继续删除第一个值,直到向量的总和小于 20?

c# - 读取 CSV 文件并转换为转置表

python - 获取打开文件的最新添加行

python - 使用填充堆叠不同长度的 Numpy 数组

python - 使用 python 替换 netCDF 文件中的值

r - SIMR 包 - 当等效的 powerSim 函数不执行时,powerCurve 函数会抛出错误

xml - 如何使用 XSLT 将 XML 转换为文本文件

csv - Julia DataFrame 第一行数据被用作列名