Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何提高打开文件、根据条件修改文件并将其复制到另一个文件的速度?_Python - Fatal编程技术网

Python:如何提高打开文件、根据条件修改文件并将其复制到另一个文件的速度?

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

我有一百万个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,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])Pandas
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]

可以用它做很多事情,但是它太宽泛了,无法将所有内容添加到答案中。我已经介绍了解决您的问题的基本方法,或者至少将问题推向解决的方向。

熊猫
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代码