我很难找到使用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()
答案 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)