在多个文本文件中用逗号替换十进制

我在一个文件夹中有 10 个 TAB 分隔的 txt 文件。它有三列(只有数字),前面有 21 行标题(文本和数字)。为了进一步处理它们,我想:

  1. 从所有文本文件中选择第二列(从 21 行标题之后开始;我附上带有箭头的图),将逗号转换为十进制并将 10 个文件中的每一列堆叠到一个新的制表符分隔/csv 文件中。一旦所有文件。

我知道很少的脚本。我有 Rstudio 和 Python,并试图摆弄一下。但我真的不知道该怎么做。由于我必须处理多个文件夹,如果可能的话,我的工作会真正简化。

http://img.mukewang.com/61249f6100014cb307761250.jpg

小怪兽爱吃肉
浏览 126回答 3
3回答

一只斗牛犬

根据您的要求,听起来这个 Python 代码应该可以解决问题:import osimport globDIR = "path/to/your/directory"OUTPUT_FILE = "path/to/your/output.csv"HEADER_SIZE = 21input_files = glob.glob(os.path.join(DIR, "*.txt"))for input_file in input_files:    print("Now processing", input_file)    # read the file    with open(input_file, "r") as h:        contents = h.readlines()    # drop header    contents = contents[HEADER_SIZE:]    # grab the 2nd column    column = []    for row in contents:        # stop at the footer        if "####" in row:            break        split = row.split("\t")        if len(split) >= 2:            column.append(split[1])    # replace the comma    column_replaced = [row.replace(",", ".") for row in column]    # append to the output file    with open(OUTPUT_FILE, "a") as h:        h.write("\n".join(column_replaced))        h.write("\n")  # end on a newline请注意,这将丢弃不属于输出文件第二列的所有内容。

江户川乱折腾

list =[]filename = "my_text"file = open(filename, "r")for line in file:    res=line.replace(",", ".")    list.append(res)    print(res)f = open(filename, "w")for item in list:    f.write(item)`enter code here`

拉莫斯之舞

下面的代码不是一个精确的解决方案,但如果你按照它的思路去做,你将接近你所需要的。output <- "NewFileName.txt"old_dir <- setwd("your/folder")files <- list.files("\\.txt")df_list <- lapply(files, read.table, skip = 21, sep = "\t")x <- lapply(df_list, '[[', 2)x <- gsub(",", ".", unlist(x))write.table(x, output, row.names = FALSE, col.names = FALSE)setwd(old_dir)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python