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")
效果如下图:
现在接着回过头运行之前写好的导入数据的程序。收获了红彤彤的一片,很喜庆。。。
所以到底是为啥捏?有可能是因为文件里的东西格式太乱了?先给自己留一个悬念,后面再研究。