python - 我将如何验证 CSV 文件是否由某个字符分隔(在本例中为反引号 ( ` ) )
问题描述
我有这些巨大的 CSV 文件需要验证;需要确保它们都用反引号`分隔。我有一个阅读器打开每个文件并打印它的内容。只是想知道你们所有人将采用不同的方式来验证每个值是否由反勾号字符分隔
for csvfile in self.fullcsvpathfiles:
#print("file..")
with open(self.fullcsvpathfiles[0], mode='r') as csv_file:
csv_reader = csv.DictReader(csv_file, delimiter = "`")
for row in csv_reader:
print (row)
不确定如何验证每个值是否由反引号分隔,否则会抛出错误。这些桌子很大(这不是电力问题;))
解决方案
方法一
使用 pandas 库,您可以使用 pandas.read_csv() 函数读取带有 sep='`' 的 csv 文件(它指定分隔符)。如果它将文件解析为形状良好的数据框,那么您几乎可以肯定这很好。
此外,为了自动化验证过程,您可以检查数据框中的 NaN 值的数量是否在可接受的范围内。假设您的 csv 文件没有很多空白(因此只需要几个 NaN 值),您可以将 NaN 值的数量与您设置的阈值进行比较。
import pandas as pd
nan_threshold = 20
for csvfile in self.fullcsvpathfiles:
my_df = pd.read_csv(csvfile, sep="`") # if it fails at this step, then something (probably the delimiter) must be wrong
nans = my_df.is_null().sum()
if nans > nan_threshold:
print(csvfile) # make some warning here
有关 pandas.read_csv() 的更多信息,请参阅此页面。
方法二
如评论中所述,您还可以检查文件每一行中分隔符的出现次数是否相等。
num_of_sep = -1 # initial value
# assume you are at the step of reading a file f
for line in f:
num = line.count("`")
if num_of_sep == -1:
num_of_sep = num
elif num != num_of_sep:
print('Some warning here')
推荐阅读
- git - 如何获取 ./configure 以生成默认值
- xcode - Xamarin.ios 无法直接部署到物理设备
- entity-framework - 使用带有 ASP.NET 样板的测试框架“努力”时出现问题
- munin - 你如何让 munin 停止发送智能退出状态的警报?
- angular - 使用 Angular 6 在后台进行多个 http 请求
- ionic-framework - 进行构建时在 ionic 中动态设置变量
- angular - 角度复选框需要问题
- unity3d - 使用 UFPS 和 Inventory Pro 时如何在 Unity 中锁定光标?
- scala - build.spark:添加火花依赖
- node.js - 如何防止由于刷新导致的多个用户输入(Node JS)