导入多个 txt 文件并为每个文件编写具有相同名称的单个 xlsx 文件
Import Multiple txt Files and Write Individual xlsx Files With Same Name For Each
我有一个文件夹,其中包含数百个 txt 文件,其中包含每个公司 code/year/month 组合的特定财务数据(对于由文件前面的四位数字指定的特定公司)。我需要一种方法来遍历所有这些文件并为每个文件创建一个 xlsx 以供审计。
例如,该文件夹将包含这样的 txt 文件:
8800-2015-01.txt
8800-2015-02.txt
......and many more like this......
所有文件都有完全相同的列、列名等。我需要读入它们并为每个文件创建 xlsx 文件并将它们保存到同一个文件夹中。
在上面的示例中,此文件夹将包含 txt 和 xlsx 文件,如下所示:
8800-2015-01.txt
8600-2015-02.txt
8800-2015-01.xlsx
8800-2015-02.xlsx
我可以编写代码来列出特定模式的所有文件:
library(writexl)
setwd(path)
list = list.files(pattern = flob2rx('*8800*.txt*')
然后可以这样做:
txt_files <- lapply(list, function(x) read_delim(x,
"|",
escape_double = FALSE,
trim_ws = TRUE,
skip = 6))
但是您将如何循环为每个文件保持相同的命名约定并将所有 xlsx 写入同一文件夹?
编辑以展示我所做的。提供的解决方案给了我想法,并最终确定了我所使用的内容。我还必须进行一些过滤和 select 原始 post.
中没有的特定列
library(writexl)
setwd(path)
file_list = list.files(pattern = glob2rx('*880*.TXT*'))
for (i in file_list){
write_xlsx(
filter(
select(
read_delim(i,
"|",
skip = 6,
escape_double = FALSE,
trim_ws = TRUE),
"col1","col2",......),
!is.na(col1) & col2 != 'something'),
paste0(unlist(strsplit(i,"\."))[1], ".xlsx"))
}
我假设您的文件的列用制表符分隔,即 R 中的“\t”。
要编写 xlsx,您需要 install.packages("xlsx")
。我不熟悉 writexl
那么你可以:
library(xlsx)
setwd(path)
files=dir(pattern="*.txt")
for(i in files){
write.xlsx(read.csv(i,sep="\t"),paste0(unlist(strsplit(i,"\."))[1],".xlsx"))
}
或者您可以同时做所有事情。首先创建一个 data.frame
包含有关文件的所有必要信息:
files_inp <- list.files(pattern ='.txt*')
files_out <- gsub(x = files_inp, pattern = ".txt", replacement = ".xlsx")
df_files <- data.frame(files_inp = files_inp,
files_out = files_out,
stringsAsFactors = FALSE)
现在您知道了所有输入名称以及所有输出名称。然后你可以创建一个函数来读取一个txt并同时保存一个xlsx:
read_and_save <-function(files_dir){
file_inp <- files_dir[1]
file_out <- files_dir[2]
df <- read.table(file = file_inp, sep = "|")
write_xlsx(x = df, path = file_out)
}
我正在使用 read.table
,因为我没有您的数据集。现在您可以将此功能应用于您拥有的整个文件集:
apply(X = df_files, MARGIN = 1, FUN = read_and_save)
我有一个文件夹,其中包含数百个 txt 文件,其中包含每个公司 code/year/month 组合的特定财务数据(对于由文件前面的四位数字指定的特定公司)。我需要一种方法来遍历所有这些文件并为每个文件创建一个 xlsx 以供审计。
例如,该文件夹将包含这样的 txt 文件:
8800-2015-01.txt
8800-2015-02.txt
......and many more like this......
所有文件都有完全相同的列、列名等。我需要读入它们并为每个文件创建 xlsx 文件并将它们保存到同一个文件夹中。
在上面的示例中,此文件夹将包含 txt 和 xlsx 文件,如下所示:
8800-2015-01.txt
8600-2015-02.txt
8800-2015-01.xlsx
8800-2015-02.xlsx
我可以编写代码来列出特定模式的所有文件:
library(writexl)
setwd(path)
list = list.files(pattern = flob2rx('*8800*.txt*')
然后可以这样做:
txt_files <- lapply(list, function(x) read_delim(x,
"|",
escape_double = FALSE,
trim_ws = TRUE,
skip = 6))
但是您将如何循环为每个文件保持相同的命名约定并将所有 xlsx 写入同一文件夹?
编辑以展示我所做的。提供的解决方案给了我想法,并最终确定了我所使用的内容。我还必须进行一些过滤和 select 原始 post.
中没有的特定列library(writexl)
setwd(path)
file_list = list.files(pattern = glob2rx('*880*.TXT*'))
for (i in file_list){
write_xlsx(
filter(
select(
read_delim(i,
"|",
skip = 6,
escape_double = FALSE,
trim_ws = TRUE),
"col1","col2",......),
!is.na(col1) & col2 != 'something'),
paste0(unlist(strsplit(i,"\."))[1], ".xlsx"))
}
我假设您的文件的列用制表符分隔,即 R 中的“\t”。
要编写 xlsx,您需要 install.packages("xlsx")
。我不熟悉 writexl
那么你可以:
library(xlsx)
setwd(path)
files=dir(pattern="*.txt")
for(i in files){
write.xlsx(read.csv(i,sep="\t"),paste0(unlist(strsplit(i,"\."))[1],".xlsx"))
}
或者您可以同时做所有事情。首先创建一个 data.frame
包含有关文件的所有必要信息:
files_inp <- list.files(pattern ='.txt*')
files_out <- gsub(x = files_inp, pattern = ".txt", replacement = ".xlsx")
df_files <- data.frame(files_inp = files_inp,
files_out = files_out,
stringsAsFactors = FALSE)
现在您知道了所有输入名称以及所有输出名称。然后你可以创建一个函数来读取一个txt并同时保存一个xlsx:
read_and_save <-function(files_dir){
file_inp <- files_dir[1]
file_out <- files_dir[2]
df <- read.table(file = file_inp, sep = "|")
write_xlsx(x = df, path = file_out)
}
我正在使用 read.table
,因为我没有您的数据集。现在您可以将此功能应用于您拥有的整个文件集:
apply(X = df_files, MARGIN = 1, FUN = read_and_save)