python - 如何使用 R 按列将 .csv 拆分为多个 .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,
        )

https://stackoverflow.com/questions/49258407/

相关文章:

google-apps - 迄今为止的 Google 表格查询字符串

c# - 可空类型 "int?"(包括问号)的默认值是多少?

python - LineString 和 Point 之间的距离

json - Microsoft Graph API 正在为 MSA 用户返回未知错误

android - React Native StackNavigator 在重新进入时消失

asynchronous - 使用 async/await 进行异步 mocha 测试时遇到问题

excel-formula - 在单元格中使用逗号分隔值作为下拉选项[Excel 2013]

amazon-web-services - 在 Looker 中可以进行分页吗?

jenkins - 如何在多分支管道项目中为每个分支级别的用户提供访问权限?

tensorflow - 如何在 Estimator 之外使用 tensorflow.feature