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