跳转到主要内容

用于生成外观真实的丑陋CSV的Python包。

项目描述

丑陋CSV生成器

Pypi project Pypi total project downloads LICENSE Python version Github Actions Codacy Badge

Python包,用于自动丑化CSV文件。为什么?为了提高必须能够支持严重损坏的输入数据的管道的测试能力。

此处自动生成的所有损坏都是非破坏性的,这意味着它们会在数据中引起混淆,但不会损坏或破坏信息。

自动损坏的灵感都来自真实的CSV文件(叹气)

人类总是以不断出现的新损坏输入数据来让我们感到惊讶,但嘿,我们可以尽量破坏测试CSV文件!

我如何安装这个包?

像往常一样,只需使用pip下载即可

pip install ugly_csv_generator

使用示例

要破坏CSV文件,可以使用以下代码片段。在下面的示例中,我们使用random_csv_generator生成一个随机的“健康”csv。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example
ugly = uglify(csv)

初始CSV将看起来像这样

region province surname
Calabria Catanzaro Rossi
Sicilia Ragusa Pinna
Lombardia Varese Sbrana
Lazio Roma Mair
Sicilia Messina Ferrari

结果丑化CSV将看起来像这样

1 2 3 4 5 6
0 //// #RIF! #RIF! 0 .... 0
1 "('surname',)('.',)(0,)" region province surname "('province',)('_',)(1,)"
2 //////// region "province " "surname " 0 0
3 /////// "region " "province " "surname " #RIF! #RIF!
4 Calabria "Catanzaro " "Rossi " 0 --------
5 " " Sicilia Ragusa "Pinna " " "
6 ------- #RIF! #RIF! 0 " "
7 ///////// "Lombardia " "Varese " Sbrana ///////////
8 --------- "Lazio " "Roma " "Mair "
9 -------- 0 ///// --- 0 /////
10 #RIF! "Sicilia " Messina "Ferrari " 0
11 0 ----- " " -------- 0

可用的丑化方法

让我们来看看可用的压缩选项!所有这些选项都可以作为关键字参数在 uglify 函数中使用。

我们从之前的示例开始,但现在我们将扩展所有可用的选项。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example

ugly = uglify(
    csv,
    empty_columns = True,
    empty_rows = True,
    duplicate_schema = True,
    empty_padding = True,
    nan_like_artefacts = True,
    replace_zeros = True,
    replace_ones = True,
    satellite_artefacts = False,
    random_spaces = True,
    include_unicode = True,
    verbose = True,
    seed = 42,
)

让我们通过充分的示例来分解所有可用的选项。在所有情况下,我们将使用以下CSV作为起点,该CSV来自 random_csv_generator 包。

from random_csv_generator import random_csv

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example

初始CSV将看起来像这样

region province surname
0 威尼托 维琴察 萨科
1 阿布鲁佐 拉奎拉 萨拉
2 Sicilia Messina 萨纳
3 马尔凯 安科纳 加洛
4 Lazio 弗罗西诺内 加洛

空列

在以下示例中,我们将在CSV中仅添加空列。这种现象在数据输入人员在表格中间留下空列时很常见。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example
ugly = uglify(
    csv,
    empty_columns = True,
    empty_rows = False,
    duplicate_schema = False,
    empty_padding = False,
    nan_like_artefacts = False,
    satellite_artefacts = False,
    random_spaces = False,
    seed = 424,
)

结果将类似于

region_2 region_0 1 region region_0 province surname
0 威尼托 维琴察 萨科
1 阿布鲁佐 L Aquila 萨拉
2 Sicilia Messina 萨纳
3 马尔凯 安科纳 加洛
4 Lazio 弗罗西诺内 加洛

空行

在以下示例中,我们将在CSV中仅添加空行。这种现象在数据输入人员在表格中间留下空行时很常见。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example
ugly = uglify(
    csv,
    empty_columns = False,
    empty_rows = True,
    duplicate_schema = False,
    empty_padding = False,
    nan_like_artefacts = False,
    satellite_artefacts = False,
    random_spaces = False,
    seed = 424,
)

结果将类似于

region province surname
0 威尼托 维琴察 萨科
1 阿布鲁佐 L Aquila 萨拉
2 Sicilia Messina 萨纳
3
4 马尔凯 安科纳 加洛
5 Lazio 弗罗西诺内 加洛
6

重复模式

在以下示例中,我们将在CSV中仅重复模式。这种现象在数据输入人员多次复制表头或多个CSV连接在一起而没有删除表头时很常见。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example
ugly = uglify(
    csv,
    empty_columns = False,
    empty_rows = False,
    duplicate_schema = True,
    empty_padding = False,
    nan_like_artefacts = False,
    satellite_artefacts = False,
    random_spaces = False,
    seed = 424,
)

结果将类似于

region province surname
0 威尼托 维琴察 萨科
1 阿布鲁佐 L Aquila 萨拉
2 Sicilia Messina 萨纳
3 region province surname
4 马尔凯 安科纳 加洛
5 Lazio 弗罗西诺内 加洛
6 region province surname

空填充

在以下示例中,我们将在CSV中仅添加空填充。在这里,填充表示数据输入人员在某个文档中间开始表格时。这。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example
ugly = uglify(
    csv,
    empty_columns = False,
    empty_rows = False,
    duplicate_schema = False,
    empty_padding = True,
    nan_like_artefacts = False,
    satellite_artefacts = False,
    random_spaces = False,
    seed = 424,
)

结果将类似于

0 1 2 3 4 5
0 region province surname
1 威尼托 维琴察 萨科
2 阿布鲁佐 L Aquila 萨拉
3 Sicilia Messina 萨纳
4 马尔凯 安科纳 加洛
5 Lazio 弗罗西诺内 加洛
6
7
8
9
10
11

类似于NaN的伪迹

在以下示例中,我们将在CSV中仅添加类似于NaN的伪迹。这种现象在数据输入人员遵循一些自定义标记来表示缺失值时很常见。这些标记可能是他们自己的或办公室的标准。在某些情况下,这可能是类似于 "N/A"、"NaN"、"NULL" 或甚至(一个或多个) "-"、"\\n" 或 "\\t" 的字符串。由于该包的目标是不破坏信息,因此它仅将NaN值替换为类似于NaN的伪迹。

在之前考虑的示例中,我们没有NaN值,所以我们将通过启用 empty_rows 选项将一些添加到CSV中。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example
ugly = uglify(
    csv,
    empty_columns = False,
    empty_rows = True,
    duplicate_schema = False,
    empty_padding = False,
    nan_like_artefacts = True,
    satellite_artefacts = False,
    random_spaces = False,
    seed = 424,
)

结果将类似于

region province surname
0 威尼托 维琴察 萨科
1 阿布鲁佐 L Aquila 萨拉
2 Sicilia Messina 萨纳
3 " " ... ----
4 马尔凯 安科纳 加洛
5 Lazio 弗罗西诺内 加洛
6 " -------

Unicode变体

类似于NaN的伪迹也可以用Unicode字符应用。这有助于测试CSV读取器对Unicode字符的鲁棒性。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example

ugly = uglify(
    csv,
    empty_columns = False,
    empty_rows = True,
    duplicate_schema = False,
    empty_padding = False,
    nan_like_artefacts = True,
    satellite_artefacts = False,
    random_spaces = False,
    include_unicode = True,
    seed = 424,
)

结果将类似于

region province surname
0 Calabria Catanzaro Rossi
1 Sicilia Ragusa Pinna
2 Lombardia Varese Sbrana
3 . 0
4 Lazio Roma Mair
5 Sicilia Messina Ferrari
6 ________

替换零

在以下示例中,我们将在CSV中仅用自定义值替换零。在不同的地方和不同的办公室,零可能有不同的表示方式。来自不同字母表或甚至不同符号的零字符可以用来表示零。请注意,此功能仅在将 include_unicode 选项设置为 True 时启用。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example

# We add a column with zeros
csv["zero"] = 0

ugly = uglify(
    csv,
    empty_columns = False,
    empty_rows = False,
    duplicate_schema = False,
    empty_padding = False,
    nan_like_artefacts = False,
    satellite_artefacts = False,
    random_spaces = False,
    replace_zeros = True,
    include_unicode = False,
    seed = 424,
)

结果将类似于

region province surname zero
0 Calabria Catanzaro Rossi 0
1 Sicilia Ragusa Pinna o
2 Lombardia Varese Sbrana 0
3 Lazio Roma Mair 0
4 Sicilia Messina Ferrari O

Unicode变体

替换零也可以用Unicode字符应用。这有助于测试CSV读取器对Unicode字符的鲁棒性。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example

# We add a column with zeros
csv["zero"] = 0

ugly = uglify(
    csv,
    empty_columns = False,
    empty_rows = False,
    duplicate_schema = False,
    empty_padding = False,
    nan_like_artefacts = False,
    satellite_artefacts = False,
    random_spaces = False,
    replace_zeros = True,
    include_unicode = True,
    seed = 424,
)

结果将类似于

region province surname zero
0 Calabria Catanzaro Rossi o
1 Sicilia Ragusa Pinna
2 Lombardia Varese Sbrana ο
3 Lazio Roma Mair 𝟘
4 Sicilia Messina Ferrari

替换一

在以下示例中,我们将在CSV中仅用自定义值替换一。在不同的地方和不同的办公室,一可能有不同的表示方式。来自不同字母表或甚至不同符号的一字符可以用来表示一。请注意,此功能仅在将 include_unicode 选项设置为 True 时启用。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example

# We add a column with ones
csv["one"] = 1

ugly = uglify(
    csv,
    empty_columns = False,
    empty_rows = False,
    duplicate_schema = False,
    empty_padding = False,
    nan_like_artefacts = False,
    satellite_artefacts = False,
    random_spaces = False,
    replace_ones = True,
    include_unicode = False,
    seed = 424,
)

结果将类似于

region province surname one
0 Calabria Catanzaro Rossi 1
1 Sicilia Ragusa Pinna l
2 Lombardia Varese Sbrana 1
3 Lazio Roma Mair 1
4 Sicilia Messina Ferrari I

Unicode变体

替换一也可以用Unicode字符应用。这有助于测试CSV读取器对Unicode字符的鲁棒性。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example

# We add a column with ones
csv["one"] = 1

ugly = uglify(
    csv,
    empty_columns = False,
    empty_rows = False,
    duplicate_schema = False,
    empty_padding = False,
    nan_like_artefacts = False,
    satellite_artefacts = False,
    random_spaces = False,
    replace_ones = True,
    include_unicode = True,
    seed = 424,
)

结果将类似于

region province surname one
0 Calabria Catanzaro Rossi ¹
1 Sicilia Ragusa Pinna
2 Lombardia Varese Sbrana l
3 Lazio Roma Mair 1
4 Sicilia Messina Ferrari

卫星伪迹

在以下示例中,我们将仅向CSV添加卫星数据。卫星数据可能是最奇特且最令人烦恼的数据,它代表数据输入人员在表格旁边添加注释的情况。我遇到的一个真实例子是,数据输入人员在表格旁边添加了办公室午餐订单,但忘记删除。

该软件包提供了在野外遇到的几种卫星数据。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example
ugly = uglify(
    csv,
    empty_columns = False,
    empty_rows = True,
    duplicate_schema = False,
    empty_padding = False,
    nan_like_artefacts = False,
    satellite_artefacts = True,
    random_spaces = False,
    seed = 424,
)

结果将类似于

0 1 2 3 4
0 随机
1 随机
2 案例
3 region province surname
4 威尼托 维琴察 萨科
5 阿布鲁佐 L Aquila 萨拉
6 Sicilia Messina 萨纳
7 马尔凯 安科纳 加洛
8 Lazio 弗罗西诺内 加洛
9
10
11
12
13
14
15 人员 食物
16 杰瑞 烤肉串
17 史蒂文 辣椒米饭
18 瓦莱 带菠萝的披萨

随机空格

在以下示例中,我们将仅向CSV中的值周围添加随机空格。这种现象在数据输入人员对表格中值的空格不够小心时很常见,例如为了在视觉上对齐值。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example
ugly = uglify(
    csv,
    empty_columns = False,
    empty_rows = False,
    duplicate_schema = False,
    empty_padding = False,
    nan_like_artefacts = False,
    satellite_artefacts = False,
    random_spaces = True,
    seed = 424,
)

结果将类似于

region province surname
0 "威尼托 " "维琴察 " "萨科 "
1 "阿布鲁佐 " "拉奎拉 " "萨拉 "
2 "西西里 " "墨西拿 " "萨纳 "
3 "马尔凯 " "安科纳 " "高洛 "
4 "拉齐奥 " "弗罗西诺内 " "高洛 "

Unicode变体

随机空格的丑化也可以使用Unicode字符。这对于测试CSV读取器对Unicode字符的健壮性很有用。

from random_csv_generator import random_csv
from ugly_csv_generator import uglify

csv = random_csv(5) # CSV with 5 lines
csv = csv[csv.columns[:3]] # We will use only the first 3 columns for this example
ugly = uglify(
    csv,
    empty_columns = False,
    empty_rows = False,
    duplicate_schema = False,
    empty_padding = False,
    nan_like_artefacts = False,
    satellite_artefacts = False,
    random_spaces = True,
    include_unicode = True,
    seed = 424,
)

由于Markdown渲染的限制,我们无法在此显示结果。您可以通过运行代码片段来查看结果。这真是太糟糕了!

贡献

您遇到了想添加到软件包中的新类型的数据丑化?您有一个新功能或改进的建议?您发现了一个错误?请提交问题或拉取请求,我将很高兴帮助您!

许可证

本项目采用MIT许可证 - 有关详细信息,请参阅LICENSE文件。

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

ugly_csv_generator-1.1.4.tar.gz (21.6 kB 查看哈希值)

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面