使用 python 将列添加到 .CSV 文件
Add column to .CSV file with python
我真的需要一些帮助。
我们收集压缩文件中的引擎数据,文件名类似于 data_XXXXXX.csv.gz
。
这些文件压缩后大约 50KB,解压缩后大约 3.5MB。它们包含大约 7000 行数据,其中每行有大约 240 个值,以“;”分隔。
几行数据是这样的:
2015-04-04 03:03:21;DIG. Engine 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:21;ANA. Engine 1;1609;0;0;1224;1601;0;0;0;0;260;0;0;0;0;0;0;0;84;0;921;22;28;310;390;364;357;0;289;293;289;289;298;305;298;302;306;297;320;297;314;303;308;301;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;424;372;24;2;0;4;0;2;8;740;432;444;2320;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2800;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;0;0;4;3;2;2;1;2;1;27;380;0;0;0;42717;14;0;0;0;0;0;0;0;0;0;0;5998;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;DIG. Engine 2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;ANA. Engine 2;1602;0;0;1012;1602;0;0;0;0;240;0;0;0;0;0;0;0;84;0;933;22;28;283;370;324;332;0;283;293;274;280;298;278;285;285;266;292;289;303;262;275;270;285;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;428;372;26;3;0;4;0;4;22;720;452;444;2288;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2825;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;0;0;4;3;2;2;3;2;1;27;384;0;0;0;44114;14;0;0;0;0;0;0;0;0;0;0;6002;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;DIG. Engine 3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;ANA. Engine 3;1516;0;0;324;0;0;0;0;0;170;0;0;0;0;0;0;0;81;24;0;0;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;572;492;40;0;0;0;0;125;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2750;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;414;182;63;82;505;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;0;0;4;8;3;4;1;3;1;12;704;0;0;0;22382;4;0;0;0;0;0;0;0;0;0;0;8972;0;0;0;0;0;0;0;0;0;0;0;46679;12;0;0;0;0;0;0;0;0;0;0;0;0;0
通过 Python 脚本,我设法解压并编辑文件,在第一和第二之间添加一列,使用类似:
try:
for row in reader:
row.insert(1,InstallationName)
newdat.append(row)
except:#encountered a .gz file which was unable to be altered. let's prevent that!
f.close()
outfile.close()
else:
writer.writerows(newdat)
f.close()
outfile.close()
完成后,文件将使用 bulkimport 导入到 MSSQL 数据库中,因此我们确实需要一个干净的 .csv 文件!
输出示例为:
2015-04-04 03:03:21;SOMETEXT;DIG. Engine 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:21;SOMETEXT;ANA. Engine 1;1609;0;0;1224;1601;0;0;0;0;260;0;0;0;0;0;0;0;84;0;921;22;28;310;390;364;357;0;289;293;289;289;298;305;298;302;306;297;320;297;314;303;308;301;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;424;372;24;2;0;4;0;2;8;740;432;444;2320;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2800;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;0;0;4;3;2;2;1;2;1;27;361;0;0;0;42717;14;0;0;0;0;0;0;0;0;0;0;5998;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;SOMETEXT;DIG. Engine 2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;SOMETEXT;ANA. Engine 2;1602;0;0;1012;1602;0;0;0;0;240;0;0;0;0;0;0;0;84;0;933;22;28;283;370;324;332;0;283;293;274;280;298;278;285;285;266;292;289;303;262;275;270;285;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;428;372;26;3;0;4;0;4;22;720;452;444;2288;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2825;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;0;0;4;3;2;2;3;2;1;27;365;0;0;0;44114;14;0;0;0;0;0;0;0;0;0;0;6002;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;SOMETEXT;DIG. Engine 3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;SOMETEXT;ANA. Engine 3;1516;0;0;324;0;0;0;0;0;170;0;0;0;0;0;0;0;81;24;0;0;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;572;492;40;0;0;0;0;125;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2750;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;414;182;63;82;505;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;0;0;4;8;3;4;1;3;1;12;332;0;0;0;22382;4;0;0;0;0;0;0;0;0;0;0;8972;0;0;0;0;0;0;0;0;0;0;0;46679;12;0;0;0;0;0;0;0;0;0;0;0;0;0
现在这有效了,它按照我希望的方式更改解压缩的 .csv 文件。但有一个缺点。文件的大小与脚本相结合让我很头疼,因为当它在多个文件上运行时,CPU 使用率飙升,服务器无法再跟上。
现在我一直在尝试使用 enumerate
表达式来加快该过程,但我就是无法获得我想要的输出。逐行方式每个文件最多需要 10 秒,枚举方式在大约 3 秒内给我 'a' 个文件。我说 'a' 文件是因为我无法让输出与输入相匹配(添加了列)。
最后我们使用的system/software是基于Python2.X(实际上是Jython)。
我知道这是让这个工作的地方,如果您有任何问题,请尽管问!
在这种情况下,如果不使用 csv 模块,您将获得性能提升,因为它拆分的内容比必要的要多得多。相反,请考虑使用更简单的 split
方法,将可选参数指定为仅通过分隔列的分号分隔一次。
with open(csvfile) as f, open(outputfile, 'w') as out:
for line in f:
tmp = line.split(';', 1) # splits only once
tmp.insert(1, extra_string)
out.write(';'.join(tmp))
我还没有检查 jython 是否支持双上下文管理器(它 supports 肯定是单一类型),如果不支持,请将其分成几行。
同时,这将防止内存变得过满(如果文件比 3.5MB 大得多,您处理 newdat.append
的方式可能存在风险)并且它将使用default buffering mechanisms of f.write
。当然,你不是被迫使用它:如果你发现填充内存然后调用 writelines
对你来说效果更好,那么就使用它(尽管缓冲机制总是由调用 open
,所以我不希望看到 IO 差异)。
请注意,CPU 使用率仍可能飙升。所有这一切真正做的是摆脱一些多余的 CPU 周期,所以它会更快地完成工作。就这些了。
我真的需要一些帮助。
我们收集压缩文件中的引擎数据,文件名类似于 data_XXXXXX.csv.gz
。
这些文件压缩后大约 50KB,解压缩后大约 3.5MB。它们包含大约 7000 行数据,其中每行有大约 240 个值,以“;”分隔。
几行数据是这样的:
2015-04-04 03:03:21;DIG. Engine 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:21;ANA. Engine 1;1609;0;0;1224;1601;0;0;0;0;260;0;0;0;0;0;0;0;84;0;921;22;28;310;390;364;357;0;289;293;289;289;298;305;298;302;306;297;320;297;314;303;308;301;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;424;372;24;2;0;4;0;2;8;740;432;444;2320;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2800;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;0;0;4;3;2;2;1;2;1;27;380;0;0;0;42717;14;0;0;0;0;0;0;0;0;0;0;5998;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;DIG. Engine 2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;ANA. Engine 2;1602;0;0;1012;1602;0;0;0;0;240;0;0;0;0;0;0;0;84;0;933;22;28;283;370;324;332;0;283;293;274;280;298;278;285;285;266;292;289;303;262;275;270;285;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;428;372;26;3;0;4;0;4;22;720;452;444;2288;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2825;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;0;0;4;3;2;2;3;2;1;27;384;0;0;0;44114;14;0;0;0;0;0;0;0;0;0;0;6002;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;DIG. Engine 3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;ANA. Engine 3;1516;0;0;324;0;0;0;0;0;170;0;0;0;0;0;0;0;81;24;0;0;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;572;492;40;0;0;0;0;125;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2750;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;414;182;63;82;505;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;0;0;4;8;3;4;1;3;1;12;704;0;0;0;22382;4;0;0;0;0;0;0;0;0;0;0;8972;0;0;0;0;0;0;0;0;0;0;0;46679;12;0;0;0;0;0;0;0;0;0;0;0;0;0
通过 Python 脚本,我设法解压并编辑文件,在第一和第二之间添加一列,使用类似:
try:
for row in reader:
row.insert(1,InstallationName)
newdat.append(row)
except:#encountered a .gz file which was unable to be altered. let's prevent that!
f.close()
outfile.close()
else:
writer.writerows(newdat)
f.close()
outfile.close()
完成后,文件将使用 bulkimport 导入到 MSSQL 数据库中,因此我们确实需要一个干净的 .csv 文件!
输出示例为:
2015-04-04 03:03:21;SOMETEXT;DIG. Engine 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:21;SOMETEXT;ANA. Engine 1;1609;0;0;1224;1601;0;0;0;0;260;0;0;0;0;0;0;0;84;0;921;22;28;310;390;364;357;0;289;293;289;289;298;305;298;302;306;297;320;297;314;303;308;301;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;424;372;24;2;0;4;0;2;8;740;432;444;2320;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2800;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;0;0;4;3;2;2;1;2;1;27;361;0;0;0;42717;14;0;0;0;0;0;0;0;0;0;0;5998;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;SOMETEXT;DIG. Engine 2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;SOMETEXT;ANA. Engine 2;1602;0;0;1012;1602;0;0;0;0;240;0;0;0;0;0;0;0;84;0;933;22;28;283;370;324;332;0;283;293;274;280;298;278;285;285;266;292;289;303;262;275;270;285;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;428;372;26;3;0;4;0;4;22;720;452;444;2288;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2825;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;0;0;4;3;2;2;3;2;1;27;365;0;0;0;44114;14;0;0;0;0;0;0;0;0;0;0;6002;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;SOMETEXT;DIG. Engine 3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2015-04-04 03:03:22;SOMETEXT;ANA. Engine 3;1516;0;0;324;0;0;0;0;0;170;0;0;0;0;0;0;0;81;24;0;0;11;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;572;492;40;0;0;0;0;125;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;2750;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;414;182;63;82;505;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;0;0;4;8;3;4;1;3;1;12;332;0;0;0;22382;4;0;0;0;0;0;0;0;0;0;0;8972;0;0;0;0;0;0;0;0;0;0;0;46679;12;0;0;0;0;0;0;0;0;0;0;0;0;0
现在这有效了,它按照我希望的方式更改解压缩的 .csv 文件。但有一个缺点。文件的大小与脚本相结合让我很头疼,因为当它在多个文件上运行时,CPU 使用率飙升,服务器无法再跟上。
现在我一直在尝试使用 enumerate
表达式来加快该过程,但我就是无法获得我想要的输出。逐行方式每个文件最多需要 10 秒,枚举方式在大约 3 秒内给我 'a' 个文件。我说 'a' 文件是因为我无法让输出与输入相匹配(添加了列)。
最后我们使用的system/software是基于Python2.X(实际上是Jython)。
我知道这是让这个工作的地方,如果您有任何问题,请尽管问!
在这种情况下,如果不使用 csv 模块,您将获得性能提升,因为它拆分的内容比必要的要多得多。相反,请考虑使用更简单的 split
方法,将可选参数指定为仅通过分隔列的分号分隔一次。
with open(csvfile) as f, open(outputfile, 'w') as out:
for line in f:
tmp = line.split(';', 1) # splits only once
tmp.insert(1, extra_string)
out.write(';'.join(tmp))
我还没有检查 jython 是否支持双上下文管理器(它 supports 肯定是单一类型),如果不支持,请将其分成几行。
同时,这将防止内存变得过满(如果文件比 3.5MB 大得多,您处理 newdat.append
的方式可能存在风险)并且它将使用default buffering mechanisms of f.write
。当然,你不是被迫使用它:如果你发现填充内存然后调用 writelines
对你来说效果更好,那么就使用它(尽管缓冲机制总是由调用 open
,所以我不希望看到 IO 差异)。
请注意,CPU 使用率仍可能飙升。所有这一切真正做的是摆脱一些多余的 CPU 周期,所以它会更快地完成工作。就这些了。