我需要从.csv文件中删除行,以便比较理想情况下每天使用python进行更改的文件。我需要删除前3行以及以“未分类”开头的行。我写了一个excel宏,它确实可以做到这一点,但是我有将近1000个文件需要修改,而相当简单的脚本要花1个小时才能完成(主要是由于保存了每个文件),所以我正在寻找更高效的文件或至少在脚本运行时不妨碍我使用excel。
这基本上是我的文件,
Date MM/DD/YYYY,,,,,,,
Start Time XX:XX,,,,,,,
Completed YY:YY,,,,,,,
A,b,c,d,e,f
g,h,i,j,k,l
1,2,3,4,5,6
,,,,,,,,,,,
,,,,,,,,,,,
,,,,,,,,,,,
Not Classified,,,,,,,
,,,,,,,,,,,
我的输出应该看起来像
A,b,c,d,e,f
g,h,i,j,k,l
1,2,3,4,5,6
,,,,,,,,,,,
,,,,,,,,,,,
,,,,,,,,,,,
预先感谢
答案 0 :(得分:3)
这在python中应该不是一件难事,并且应该比您的宏更快[并且可能更简单;)
]。请参阅以下内容:我们删除前三行,并删除所有“非分类”行,然后将其写回到新文件中。
FILENAME = './the.csv'
def your_operation(path):
with open(path) as f:
lines = f.readlines()
if len(lines) > 3:
lines = lines[3:]
lines = list(filter(lambda x: not x.startswith('Not Classified'), lines))
with open(f'{path.replace(".csv", "")}-modified.csv', 'w') as f:
f.writelines(lines)
your_operation(FILENAME)
请注意,这使用的是f-strings
,该版本在3.6及更高版本中可用。您可以将该行替换为
new_path = path.replace('.csv', '') + '-modified.csv'
with open(new_path, 'w') as f:
...
(如果您使用的是旧版本)。您可以扩展它以对目录中的所有文件执行此操作,这似乎是您想要的目标。如果您不想使用旧内容并且对我足够信任,也可以将其写回到同一文件中。但是,我不确定Excel如何处理其他应用程序的写入-但是写入新文件肯定会让您在此期间使用excel。
import glob
root = "path/to/dir/**.csv" # recursive search in dir
for path in glob.glob(root):
your_operation(path)
答案 1 :(得分:0)
您可以使用类似的内容:
A,b,c,d,e,f
g,h,i,j,k,l
1,2,3,4,5,6
,,,,,,,,,,,
,,,,,,,,,,,
,,,,,,,,,,,
,,,,,,,,,,,
您的示例的输出:
csv
上面的代码将在new_
和csv
中找到的每个/path/to/csvs/
文件中生成一个新的经过过滤的subdirs
文件,并以```
FILE *ptr;
int width, height, max_colour;
ptr = fopen("picture.ppm","rb");
fscanf (ptr, "P3\n %d\n %d\n %d", &width, &height, &max_colour);
printf("%d\n", max_colour);
unsigned char *data = malloc(width*height);
fread(ptr,width*height,1,data);
```
为前缀。
答案 2 :(得分:0)
对于名为“ file.csv”的CSV文件,您可以运行以下两条Python行:
with open("file.csv", "r") as f:
lines = [line for line in f.readlines()[3:] if not line.startswith("Not Classified")]
with open("new-file.csv", "w") as f:
f.writelines(lines)