Python:如何提高打开文件、根据条件修改文件并将其复制到另一个文件的速度?
我有一百万个csv文件,每个文件有441行和8列。我打开每个文件,检查第221行是否有大于60的列。如果是这样,我将该列中所有行的值都设为“-1”。Python:如何提高打开文件、根据条件修改文件并将其复制到另一个文件的速度?,python,Python,我有一百万个csv文件,每个文件有441行和8列。我打开每个文件,检查第221行是否有大于60的列。如果是这样,我将该列中所有行的值都设为“-1”。 例如: Input row 220: 65,13,15,27,18,51,20,79 row 221: 25,23,45,67,12,11,23,69 row 222: 12,12,14,15,16,17,19,22 Output row 220: 65,13,15,-1,18,51,20,-1 row 221: 25,2
例如:
Input
row 220: 65,13,15,27,18,51,20,79
row 221: 25,23,45,67,12,11,23,69
row 222: 12,12,14,15,16,17,19,22
Output
row 220: 65,13,15,-1,18,51,20,-1
row 221: 25,23,45,-1,12,11,23,-1
row 222: 12,12,14,-1,16,17,19,-1
完成上述处理后,我将这些内容复制到另一个文件中。我为所有文件执行上述操作
守则:
file_list=[]
mypath1=os.path.join(mypath,dut) // dut refers to the directory name
out_path1=os.path.join(mypath1,folder1)
if not os.path.exists(out_path1):
os.mkdir(out_path1)
for i in listdir(mypath1):
if i.startswith("PD") and i.endswith(".csv"):
file_list.append(i)
for j in file_list:
#print j
f = open(os.path.join(mypath1,j),'r')
f5=csv.reader(f)
sec=[]
f5 = list(f5)
for col in range(0,8):
if int(f5[220][col]) <= 60:
sec.append(col)
for r in range(0,441):
for value in sec:
f5[r][value] = -1
filename = "temp1_" + j
f2 = open(os.path.join(out_path1,filename),'w+')
f1=csv.writer(f2)
f1.writerows(f5)
f2.close()
f.close()
flag=1
文件列表=[]
mypath1=os.path.join(mypath,dut)//dut指的是目录名
out_path1=os.path.join(mypath1,folder1)
如果操作系统路径不存在(out_path1):
os.mkdir(输出路径1)
对于listdir(mypath1)中的i:
如果i.startswith(“PD”)和i.endswith(“csv”):
文件列表。追加(i)
对于文件列表中的j:
#打印j
f=open(os.path.join(mypath1,j),'r')
f5=csv.reader(f)
秒=[]
f5=列表(f5)
对于范围(0,8)内的列:
如果int(f5[220][col])PandasPandas.read\u csv
比csv.reader
更快。它应该更适合您的应用程序:。要写入的相应函数为
可在此处找到比较:。从上述链接复制部分统计信息:(在windows 7上测试运行)
read\u csv
返回熊猫数据帧。它提供了一种方法iloc
(索引位置)来获取基于整数的索引(有许多其他的访问方法来满足不同的需求)。一个简单的例子如下所示
import pandas as pd
df = pd.read_csv("foo.csv")
row5 = df.iloc[4]
col3 = df.iloc[:][2]
可以用它做很多事情,但是它太宽泛了,无法将所有内容添加到答案中。我已经介绍了解决您的问题的基本方法,或者至少将问题推向解决的方向。熊猫Pandas.read\u csv
比csv.reader
更快。它应该更适合您的应用程序:。要写入的相应函数为
可在此处找到比较:。从上述链接复制部分统计信息:(在windows 7上测试运行)
read\u csv
返回熊猫数据帧。它提供了一种方法iloc
(索引位置)来获取基于整数的索引(有许多其他的访问方法来满足不同的需求)。一个简单的例子如下所示
import pandas as pd
df = pd.read_csv("foo.csv")
row5 = df.iloc[4]
col3 = df.iloc[:][2]
可以用它做很多事情,但是它太宽泛了,无法将所有内容添加到答案中。我已经介绍了解决问题或至少解决问题的基本方法。我将首先将变量重构为使seomse有意义的名称,而不是f5
。也许您可以将目录读入RAM,在RAM中修改,然后写回(不太确定如何在Python中执行,但可能是可行的)。我会认为读写硬盘是主要的瓶颈,而且在大批量的情况下会有很大的折扣。创建只读取csv的代码,然后输出到新文件。时间到了。我想你会发现占用你大部分时间的是磁盘访问,而不是python代码。我会首先将变量重构为有意义的名称,而不是f5
。也许你可以将目录读入RAM,在RAM中修改,然后写回(不太确定如何使用Python,但可能会)。我认为读写硬盘是主要的瓶颈,而且在大批量执行时会有很大的折扣。创建只读取csv的代码,然后输出到新文件。时间到了。我想你会发现磁盘访问占用了你大部分时间,而不是python代码