我有很多 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)都非常(!)欢迎!
谢谢!
干杯,比吉特
如果您只想知道,哪个文件包含多少个标题(假设标题中没有数字):
@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
)来获取每个文件的标题计数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句