使用Python CSV删除CSV中的行的最简单方法是什么?

时间:2017-11-17 15:44:56

标签: python csv parsing

我很难找到使用CSV模块从CSV中删除选择行的简明方法(不是Panda,因为它需要安装)。我还想分别删除一系列行。我在国内或国外看到的每篇文章和每一个问题都不清楚,并且往往包含人们所询问的特定逻辑。我只想要一个非常简单的明确答案。

我想使用argv提供文件名,开始行号和结束行号。所以像python Script.py /CSVfile.csv 1 5,意思是文件名并删除第1到5行(开始和结束)。我是Python脚本的新手,我在那里得到了一半,但总有一些逻辑人员包括与我需要做的事情无关。我只是一直被阻止(正如我通常在尝试编码时所做的那样),任何帮助都表示赞赏。

import csv
import sys

var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]

with open (var1, 'w') as file1:
   reader = csv.reader(file1)
   for line in reader:
      file1.writer()

2 个答案:

答案 0 :(得分:1)

类似问题here

with open("foo.txt", "r+") as f:
     old = f.read() # read everything in the file
     f.seek(0) # rewind
     f.write("new line\n" + old) # write the new line before

使用搜索转到行号并添加' \ n'或者其他什么。

答案 1 :(得分:1)

只需枚举这些行,如果它们的索引位于您要排除的范围内,则不要复制它们:

import csv
import sys

var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]

with open (var1, 'r') as file1:
   reader = csv.reader(file1)
   for i, line in enumerate(reader):
      if (i < var2) or (i > var3):
          # process line...

如果要过滤到位,您可以将选定的行写入临时文件,最后将旧文件重命名为新文件,但此处没有正确的解析原因行

import sys
import tempfile

var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]

(file2, name2) = tmpfile.msktemp()     # get a temporary file
try:
    with open (var1, 'r') as file1:
       for i, line in enumerate(file1):
          if (i < var2) or (i > var3):   # copy selected lines to temp file
              dummy = file2.write(line)
    file2.close()
except:
    remove(name2) # error: remove tempfile
    file2 = None
if file2 is not None:      # successful copy: rename to initial name
    remove(var1)
    rename(name2, var1)