python - 如何使用循环来调整路径名
问题描述
我正在开发一个分析大量 csv 文件的程序。目前我正在手动声明每个项目,但正如您在我的代码中看到的那样,我实际上只是在我的路径和变量名中 +1。我想我可以用一个循环来简化它,只是不知道如何用路径名来做到这一点。
我的代码:
import pandas as pd
import numpy as np
### declation ###
df_primes1 = pd.DataFrame()
df_primes1 = np.array(df_primes1)
df_search1 = pd.DataFrame()
df_primes2 = pd.DataFrame()
df_primes2 = np.array(df_primes2)
df_search2 = pd.DataFrame()
df_primes3 = pd.DataFrame()
df_primes3 = np.array(df_primes3)
df_search3 = pd.DataFrame()
searchterm = '322'
### reads csv in numpy array ###
df_primes1 = pd.read_csv('1/1_Primes_32.csv', delimiter=';', header=None, names='1')
df_primes2 = pd.read_csv('1/2_Primes_32.csv', delimiter=';', header=None, names='2')
df_primes3 = pd.read_csv('1/3_Primes_32.csv', delimiter=';', header=None, names='3')
### sorts prime numbers ###
#df_sorted = df_primes1.sort_values(by='n')
#print(df_sorted)
### searches for number with "searchterm" as start value ###
df_search1 = df_primes1[df_primes1['1'].astype(str).str.startswith(searchterm)]['1']
df_search2 = df_primes2[df_primes2['2'].astype(str).str.startswith(searchterm)]['2']
df_search3 = df_primes3[df_primes3['3'].astype(str).str.startswith(searchterm)]['3']
print(df_search1)
print(df_search2)
print(df_search3)
该程序正在运行,我只是想知道如何简化它,因为这样的文件还有 20 多个。
解决方案
IIUC,我们可以使用 pathlib 和字典理解:
from pathlib import Path
p = 'Path/to/your_csv/'
dfs = {
f"search_{i}": pd.read_csv(file, delimiter=";",
header=None,
names=str(i))
for i, file in enumerate(Path(p).glob("*Prime*.csv"), 1)
}
分解每个项目,
p
是保存 csvs 的目标文件夹
i
是一个遍历文件的枚举器,您很可能需要添加一个对 csv 进行排序的前置步骤,以获得您所追求的顺序。
file
是从生成器对象返回的每个项目。我们将每个值转换为数据框。
您可以按您的集合过滤每个数据框,即
dfs['search_1']
这将返回一个数据框。
推荐阅读
- mysql - 确定一组行中的每个实体 ID 是否违反了一组速率限制
- ckeditor - 如何告诉ckeditor5默认使用我的自定义标题类型
- java - 退出应用程序后如何存储复选框状态?
- amazon-web-services - 如何在所有 AWS 账户之间共享 SSM 文档?
- oracle - Like 运算符或任何其他可以使用的运算符
- php - 删除已定义产品类别组的 WooCommerce 支付网关
- javascript - 文本之间的空间如何根据字体大小缩放?
- android - 从改造 2.6.2 更新到改造 2.9.0 后 OkHttpClient.Builder() 中的 java.lang.NoSuchMethodError
- arrays - Redux 存储不更新数组而是抛出错误状态。列表不可迭代
- javascript - 如何将我的输入值复制到 React 中的下一个输入?