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

使用Python CSV删除CSV中的行的最简单方法是什么?,python,csv,parsing,Python,Csv,Parsing,我很难找到使用CSV模块而不是Panda从CSV中删除选择行的清晰简洁的方法,因为需要安装它。我还想分别删除一系列行。我在国内外看到的每一篇文章和每一个问题都不清楚,而且往往包含人们所问的特定逻辑。我只想得到一个非常简单的明确答案 我想使用argv提供文件名、起始行号和结束行号。例如python Script.py/CSVfile.csv 1 5,表示文件名,并删除从1到5行的开头和结尾。我对Python脚本还不熟悉,我已经完成了一半,但总有一些人包含的逻辑与我需要做的事情无关。我只是不断地被阻

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

我想使用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()
类似问题

使用seek并添加'\n'或任何内容转到行号。

类似问题


使用seek和add'\n'或其他方法转到行号。

只要列举行,如果它们的索引在您想要排除的范围内,则不要复制它们:

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)

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

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)

由于在迭代过程中无法在位修改文件,因此应该创建另一个文件,只需将所需的行写入其中。是。读取原始文件->将其内容放入数据结构->更改该数据结构的元素->将其写入新文件或覆盖原始文件您可以使用fileinput inplace用新文件覆盖原始文件。由于在迭代过程中无法在位修改文件,因此应该创建另一个文件,只需将所需的行写入其中。是。读取原始文件->将其内容放入数据结构->更改该数据结构的元素->将其写入新文件或覆盖原始文件您可以使用fileinput inplace用新文件覆盖原始文件。太好了,谢谢Serge,这有助于我走上正轨-temfile不需要定义吗?我还需要导入操作系统以进行删除和重命名吗?因此,我能够将您放在上面的第一个操作系统放在一个位置,它正在写入辅助文件,这很好,但它所做的一切都是将file1的全部内容写入file2。。。我卡住了。在“if ivar4:”之后使用“writer.writerowline:”我为辅助文件添加了另一个变量。太好了,谢谢Serge,这有助于我走上正确的道路-temfile不需要定义吗?我还需要导入操作系统以进行删除和重命名吗?因此,我能够将您放在上面的第一个操作系统放在一个位置,它正在写入辅助文件,这很好,但它所做的一切都是将file1的全部内容写入file2。。。我卡住了。在“if ivar4:”之后使用“writer.writerowline”,我为辅助文件添加了另一个变量。