快速识别csv文件中的多个表?

时间:2018-07-23 12:18:33

标签: python csv unix command-line

我有很多csv文件,必须从中提取路径和标头。我用于此目的的python脚本的工作原理就像一个咒语:

#!/usr/bin/python
import os
import csv
thisdir = os.getcwd() 

# Create empty list for csvfiles
csvfiles = []

# Extract file-paths and append them to "csvfiles"
for r, d, f in os.walk(thisdir):    # r=root, d=directories, f = files
    for file in f:
        if ".csv" in file:
            csvfiles.append(os.path.join(r, file))

# Create header-extraction function:
def get_csv_headers(filename):
    with open(filename) as f:
        reader = csv.reader(f, delimiter=",") 
        return next(reader)

# Create empty list for headers
headers=[]

# Extract headers with the function and append them to "headers" list
for l in csvfiles:
    headers.append(get_csv_headers(l))

with open('text.csv', 'w') as f:
    writer = csv.writer(f, delimiter=',') # In EU: use semicolon; else comma
    for path, header in zip(csvfiles, headers):
        writer.writerow(list(path.split("/")[1:]) + header)

但是!我刚刚意识到某些csv文件包含多个表! 表的“分隔”方式并不一致-有些具有多行空间,有些没有。标头都包含字母和表行号(有些后面跟字母)。 遍历所有+200个csv文件来检查单个csv文件中是否有多个表似乎是一项繁琐的任务。

您是否知道有什么方法可以快速识别哪些csv文件包含多个表(命令行或类似文件),在一个csv中提取多个表的标头-或其他无需打开和打开的创意通过所有的CSV文件。任何想法(命令行/ python)都非常(!)欢迎!

谢谢!

干杯,比吉特

1 个答案:

答案 0 :(得分:1)

如果您只想知道哪个文件包含多少个标头(假设标头中没有数字):

@echo off
for %%f in (*.csv) do (
  for /f %%i in ('findstr /v "[0-9]" "%%f" ^|find /c /v ""') do (
    echo there are %%i Headers in %%f
  ) 
)

外部for遍历您的.csv文件,内部for通过过滤不带数字的行(使用findstr /v "[0-9])并计数来获得每个文件头的计数(带有find /c)。