Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python从Mongodb中的字段中删除文本_Python_Mongodb_Csv - Fatal编程技术网

使用Python从Mongodb中的字段中删除文本

使用Python从Mongodb中的字段中删除文本,python,mongodb,csv,Python,Mongodb,Csv,我有一个CSV文件,它的字段/列带有逗号(“,”)。我将这个CSV加载到mongodb中进行数据操作。我想将所有文本从逗号向右剥离,只将文本保留在逗号的左侧 完成这项任务最有效的方法是什么?在我的mongodb csv导入脚本中(我使用熊猫)?之后当数据已经在MongoDB中时?老实说,我是编程新手,我想知道如何在这两种情况下进行编程,但我希望看到一种最有效的解决方案 以下是我的csv到python导入脚本: #!/usr/bin/env python import sys import os

我有一个CSV文件,它的字段/列带有逗号(“,”)。我将这个CSV加载到mongodb中进行数据操作。我想将所有文本从逗号向右剥离,只将文本保留在逗号的左侧

完成这项任务最有效的方法是什么?在我的mongodb csv导入脚本中(我使用熊猫)?之后当数据已经在MongoDB中时?老实说,我是编程新手,我想知道如何在这两种情况下进行编程,但我希望看到一种最有效的解决方案

以下是我的csv到python导入脚本:

#!/usr/bin/env python
import sys
import os
import pandas as pd
import pymongo
import json

def import_content(filepath):
    mng_client = pymongo.MongoClient('localhost', 27017)
    mng_db = mng_client['swx_inv']
    collection_name = 'device.switch'
    db_cm = mng_db[collection_name]
    cdir = os.path.dirname(__file__)
    file_res = os.path.join(cdir, filepath)

data = pd.read_csv(file_res, skiprows=2, skip_footer=1)
data_json = json.loads(data.to_json(orient='records'))
db_cm.remove()
db_cm.insert(data_json)

if __name__ == "__main__":
    filepath = '/vagrant/data/DeviceInventory-Category.Switch.csv'
    import_content(filepath)
以下是CSV的前三行以供参考。我正在尝试更改最后一个字段“OS Image”:

编辑:我找到了一种方法,可以在上传到mongoDB集合之前通过pandas完成我需要的工作。我必须这样做两次,因为保存列数据使用两个不同的分隔符,并且正则表达式不能正常工作:

# Use pandas to read CSV, skipping top 2 lines & footer line from
# CSV export. Set column data to string type.
data = pd.read_csv(
    file_res, index_col=False, skiprows=2,
    skip_footer=1, dtype={'Device': str, 'Serial Number': str,
                          'Realm': str, 'Vendor': str, 'Model': str,
                          'OS Image': str}
)
# Drop rows where Serial Number is empty
data = data.dropna(subset=['Serial Number'])

# Split the OS Image column by "," and ";" to remove extraneous data
data['OS Image'].update(data['OS Image'].apply(
    lambda x: x.split(",")[0] if len(x.split()) > 1 else None)
)
data['OS Image'].update(data['OS Image'].apply(
    lambda x: x.split(";")[0] if len(x.split()) > 1 else None)
)
将列表理解转换为循环以提高可读性:

newtext=""
for row in csv.reader(s.split("\n")):
    newtext+=','.join(row[:5])+","+str(row[5].split(",")[0])+"\n"
print(newtext)
输出:

Device,Serial Number,Realm,Vendor,Model,OS Image
ABBNWX0100,SMG3453ESDN,BlAH BLAH,Cisco,WS-C6509-E,IOS 12.2(33)SXI9
ABBNWX0101,SDG127343S0,BLAH BLAH,Cisco,WS-C4506-E,IOS 12.2(53)SG8
ABBNWX0102,TREFDSFY1KK,BLAH BLAH,Cisco,WS-C3560V2-48PS-S,IOS 12.2(55)SE5

对于您必须使用的文件

with open(fname) as f:
    content = f.readlines()

content
将在文件中包含一个行列表,然后使用
csv.reader(content)

谢谢ritesht93。帮了大忙。我想找到一种方法来更新mongodb中的现有条目,但我已经在导入脚本中完成了这项工作,可以将其用作更新的蓝图——尽管我可能只是清除数据库,重新加载并继续。
Device,Serial Number,Realm,Vendor,Model,OS Image
ABBNWX0100,SMG3453ESDN,BlAH BLAH,Cisco,WS-C6509-E,IOS 12.2(33)SXI9
ABBNWX0101,SDG127343S0,BLAH BLAH,Cisco,WS-C4506-E,IOS 12.2(53)SG8
ABBNWX0102,TREFDSFY1KK,BLAH BLAH,Cisco,WS-C3560V2-48PS-S,IOS 12.2(55)SE5
with open(fname) as f:
    content = f.readlines()