用Python批量转换文件后缀名并尝试批量导入MongoDB

sddsddsd从网上的一个数据库下载了一堆.krn文件,这个具体干啥我不是很清楚,但好像是一个游戏文档?反正不是很常见就是了。然后里面有我需要的数据,接下来借助python将它们从.krn转换成.csv文件。代码如下:

#-*- coding: utf-8 -*-
import os

def batch_change_file_extension(folder_path, old_extension, new_extension):
    for filename in os.listdir(folder_path):
        if filename.endswith(old_extension):
            # 构建旧文件路径和新文件路径
            old_file_path = os.path.join(folder_path, filename)
            new_file_path = os.path.join(folder_path, filename.rsplit('.', 1)[0] + new_extension)

            # 重命名文件
            os.rename(old_file_path, new_file_path)
            print(f"已将文件 {filename} 重命名为 {os.path.basename(new_file_path)}")


# 指定文件夹路径、旧后缀和新后缀
folder_path = "D:\民歌项目\shanxi"
old_extension = ".krn"
new_extension = ".csv"

batch_change_file_extension(folder_path, old_extension, new_extension)

最后的效果是:原本的.krn文件全部被替换成了.csv文件。注意,这里是替换,而不是新建。如果想新建需要更改python代码。

接下来,我希望将所有.csv文档里的内容批量导入到建好的MongoDB的集合里,问了一下文心一言,给出的代码如下:

#-*- coding: utf-8 -*-
import os
import pandas as pd
from pymongo import MongoClient

# 连接到MongoDB数据库
client = MongoClient('mongodb://localhost:27017/')
db = client['testdb']
collection = db['count']

# 遍历文件目录
directory = 'D:\民歌项目\shanxi'
for filename in os.listdir(directory):
    file_path = os.path.join(directory, filename)

    # 读取文件中的数据
    if filename.endswith('.csv'):
        data = pd.read_csv(file_path)
    elif filename.endswith('.json'):
        data = pd.read_json(file_path)
    else:
        print("no")
        # 根据文件格式选择适当的读取方法

    # 将数据插入MongoDB
    documents = data.to_dict('records')
    result = collection.insert_many(documents)
    inserted_ids = result.inserted_ids
    print(f"Inserted {len(inserted_ids)} documents from {filename}")

# 处理导入结果
print("Import completed.")

其中:

else:
     print("no")

是我后来自己添加的,因为第一次跑完之后出现报错说data未定义,我就想很有可能是判断的时候没有找到对应的后缀名,就又加了这个条件来进一步确认。再运行一次,不出我所料:

但是我在资源管理器里看到的文件属性确实是.csv

问题到底出在哪里?有没有可能是程序识别的时候是看该文件名是否以“.csv”结尾,而不是看这个文件是不是.csv文件,而我的这些文件都没有将.csv后缀写在文件名里,于是我又搓了一个程序,用来更改这批文件的后缀名:

#-*- coding: utf-8 -*-
import os

folder_path="D:\民歌项目\shanxi"
# 获取当前目录下的所有文件
files = os.listdir(folder_path)

for file in files:
    # 判断是否是文件(而非目录)
    if os.path.isfile(os.path.join(folder_path, file)):
        # 给文件名添加后缀
        new_file = file + ".csv"
        # 重命名文件
        os.rename(os.path.join(folder_path, file), os.path.join(folder_path, new_file))
        print("ok")
    else:
        print("no")

效果如下图:

现在接着回过头运行之前写好的导入数据的程序。收获了红彤彤的一片,很喜庆。。。

所以到底是为啥捏?有可能是因为文件里的东西格式太乱了?先给自己留一个悬念,后面再研究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值