首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行追加操作后目标文件中出现的不一致行为

执行追加操作后目标文件中出现的不一致行为
EN

Stack Overflow用户
提问于 2022-06-09 03:22:40
回答 1查看 39关注 0票数 0

在将条目附加到文件中时,我遇到了一个奇怪的问题。

关于代码的一些背景知识,它是一组Python模块,

  • 1模块负责比较两个CSV filesMaster记录和最新记录:这两个文件包含具有特定属性的对象,取出两个文件之间的增量,并使用APIs.

调用第二个模块在filesMaster服务器上创建/修改/删除某些对象。

  • 第二模块负责通过
  • 的请求库通过API与API服务器进行交互。此模块根据对某个记录所采取的操作来更新/新/删除主记录CSV文件中的条目。

  • 的末尾,第一个模块将对这些对象执行的增量对象记录和操作打印到终端,如下所示,

代码语言:javascript
复制
+----+-----------+---------------+----------------+------------+----------+--------------------------------------+--------------------------------------------+
|    | UE_NAME   | UE_TYPE       | ES_NAME        | APN_NAME   | STATUS   | UE_ROUTES_OPERATION(MOBILE_ROUTER)   | UE_ROUTES(MOBILE_ROUTER)                   |
+====+===========+===============+================+============+==========+======================================+============================================+
|  0 | ue_1      | MOBILE_ROUTER | Edge_service_4 | apn1862    | UE_ADDED | UE_ROUTE_ADDED                       | ['172.16.10.0/26(A)']                      |
+----+-----------+---------------+----------------+------------+----------+--------------------------------------+--------------------------------------------+
|  1 | ue_6      | IOT_MOBILE    | Edge_service_1 | apn_nuage  | UE_ADDED | --                                   | --                                         |
+----+-----------+---------------+----------------+------------+----------+--------------------------------------+--------------------------------------------+
|  2 | ue_2      | MOBILE_ROUTER | Edge_service_4 | apn1862    | UE_ADDED | UE_ROUTE_ADDED                       | ['172.16.10.0/18(A)', '172.16.12.0/24(A)'] |
+----+-----------+---------------+----------------+------------+----------+--------------------------------------+--------------------------------------------+
|  3 | ue_201    | MOBILE_ROUTER | test1          | apn_nuage  | UE_ADDED | UE_ROUTE_ADDED                       | ['172.16.10.0/16 (A)']                     |
+----+-----------+---------------+----------------+------------+----------+--------------------------------------+--------------------------------------------+

现在,面对问题,从代码的角度来看,一切都很好。但是,我看到了一个问题,更新被附加到Master_record文件。在最初执行此工具之后,在看到主记录CSV之后,

代码语言:javascript
复制
more .\master_records.csv

name,IMSI,MSISDN,ICCID,IMEI,Enterprise,operationalStatus,ueType,ueRoutes,description,apn_name
ue_1,1,1,1,1,Edge_service_4,IDLE,MOBILE_ROUTER,"172.16.10.0/26",UE-1-desc,apn1862
ue_6,6,6,6,6,Edge_service_1,CONNECTED,IOT_MOBILE,,UE-6,apn_nuage
ue_2,2,2,2,2,Edge_service_4,CONNECTED,MOBILE_ROUTER,"172.16.10.0/18,172.16.12.0/24",UE-2-desc,apn1862
ue_201,201,201,201,203,test1,IDLE,MOBILE_ROUTER,"172.16.10.0/16 ",UE-201,apn_nuage

但是,在修改了一篇题为“ue_1”的"Latest_records.csv“的文章之后,双引号从ue_201的对象记录中消失了,在脚本完成后,master_records文件位于,

代码语言:javascript
复制
more .\master_records.csv

name,IMSI,MSISDN,ICCID,IMEI,Enterprise,operationalStatus,ueType,ueRoutes,description,apn_name
ue_6,6,6,6,6,Edge_service_1,CONNECTED,IOT_MOBILE,,UE-6,apn_nuage
ue_2,2,2,2,2,Edge_service_4,CONNECTED,MOBILE_ROUTER,"172.16.10.0/18,172.16.12.0/24",UE-2-desc,apn1862
ue_201,201,201,201,203,test1,IDLE,MOBILE_ROUTER,172.16.10.0/16 ,UE-201,apn_nuage
ue_1,1,1,1,1,Edge_service_4,CONNECTED,MOBILE_ROUTER,"172.16.10.0/26",UE-1-desc,apn1862

您可以看到对象ue_201缺少172.16.10.0/16前后的双引号

这个问题仅在“”列下只有一个对象的情况下才能看到,如果我有"172.16.10.0/18,172.16.12.0/24“这样的多个对象,则不会看到这个问题。

更新主记录的代码非常简单,如下所示,

代码语言:javascript
复制
def add_entry_master_record(row_entry):
"""
Adds a UE Entry to Master Record file.

:param row_entry: UE record Entry.

:return: Updates the existing Master Record file.
"""

try:
    with open(m_record, 'a+') as master_record_update:
        master_record_update.write(row_entry)
        master_record_update.write('\n')

except FileNotFoundError as err_file:
    raise SystemExit(err_file)

在检查“row_entry”的内容后,我没有看到Master_record文件对ue_201的任何更新,而只对ue_1进行了如下所示的更新,

代码语言:javascript
复制
row_entry = ue_1,1,1,1,1,Edge_service_4,CONNECTED,MOBILE_ROUTER,"172.16.10.0/26",UE-1-desc,apn1862

一旦这种不规则性蔓延进来,它就开始干扰我的代码,因为latest_record和master_record文件之间的增量计算也处理掉了非增量内容。我能够解决这个问题,通过在比较之前使用一些正则替换,但我仍然好奇为什么这种不规律发生在第一位。

关于如何更新Master_record文件的说明:

  • 我正在使用下面的代码,在使用前面共享的附加代码

修改现有对象之后,删除现有对象的old_record并添加新记录。

代码语言:javascript
复制
    def drop_rows_master_record(ue_name, mod_entry):
    """
    Drops the Entries from Master Record csv file.

    :param ue_name: UE Name for which Entry needs to be dropped.
    :param mod_entry: UE Record

    :return: Drops the deleted/modified UE record from Master Records.
    """

    df = pd.read_csv(m_record)
    df_filtered = df[(df['name'].str.lower() == ue_name.lower()) &
                     (df['Enterprise'].str.lower() == mod_entry['Enterprise'].lower())]
    df.drop(df_filtered.index, inplace=True)
    df.reset_index(drop=True, inplace=True)
    df.to_csv(m_record, index=False)

让我知道,如果你们能分享一个指针,为什么这种差异正在悄悄出现,首先。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-21 02:38:35

我找到了这个问题的根源。这不是Pandas或Python的问题。* Pandas只是确认CSV格式,如果列中定义了一个元素,则删除引号。

因此,例如,如果CSV列只有一个值,如

代码语言:javascript
复制
ue_routes
10.18.19.0/24

在文本文件中,我们将看到它没有引号。

但是,如果CSV列有多个值,

代码语言:javascript
复制
ue_routes
10.18.19.0/24, 10.18.20.0/24

在文本文件中,我们将看到它的引号。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72554385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档