我有一些CSV文件,我必须通过循环修改。代码循环遍历源文件,读取每一行,进行一些修改,然后将输出保存到另一个CSV文件。为了检查我的工作,我希望第一行和最后一行保存在另一个文件中,这样我就可以确认没有跳过任何内容。
我所做的是将所有行放入一个列表,然后从索引减去1得到最后一行。这有效,但我想知道是否有更优雅的方法来实现这一点。
代码示例:
def CVS1():
fb = open('C:\\HP\\WS\\final-cir.csv','wb')
check = open('C:\\HP\\WS\\check-all.csv','wb')
check_count = 0
check_list = []
with open('C:\\HP\\WS\\CVS1-source.csv','r') as infile:
skip_first_line = islice(infile, 3, None)
for line in skip_first_line:
check_list.append(line)
check_count += 1
if check_count == 1:
check.write(line)
[CSV modifications become a string called "newline"]
fb.write(newline)
final_check = check_list[len(check_list)-1]
check.write(final_check)
fb.close()
答案 0 :(得分:1)
如果您确实需要check_list
的某些内容,那么,正如其他答案所示,使用check_list[-1]
相当于check_list[len(check_list)-1]
更好。
但你真的需要清单吗?如果您想要跟踪的是第一行和最后一行,那么您就不会这样做。如果你专门跟踪第一行,并跟踪当前行,那么最后,第一行和当前行就是你想要的那一行。
事实上,由于您在看到第一行时似乎正在将第一行写入check
,因此除了当前行之外,您不需要跟踪任何内容。目前的行,你已经得到了它,line
。
所以,让我们去除所有其他东西:
def CVS1():
fb = open('C:\\HP\\WS\\final-cir.csv','wb')
check = open('C:\\HP\\WS\\check-all.csv','wb')
first_line = True
with open('C:\\HP\\WS\\CVS1-source.csv','r') as infile:
skip_first_line = islice(infile, 3, None)
for line in skip_first_line:
if first_line:
check.write(line)
first_line = False
[CSV modifications become a string called "newline"]
fb.write(newline)
check.write(line)
fb.close()
答案 1 :(得分:0)
您可以枚举输入文件的csv行,并检查索引,如下所示:
def CVS1():
with open('C:\\HP\\WS\\final-cir.csv','wb') as fb, open('C:\\HP\\WS\\check-all.csv','wb') as check, open('C:\\HP\\WS\\CVS1-source.csv','r') as infile:
skip_first_line = islice(infile, 3, None)
for idx,line in enumerate(skip_first_line):
if idx==0 or idx==len(skip_first_line):
check.write(line)
#[CSV modifications become a string called "newline"]
fb.write(newline)
我用with
块替换了open语句,委托翻译文件处理程序
答案 2 :(得分:0)
您可以直接访问索引-1
:
final_check = check_list[-1]
比你现在的更好:
final_check = check_list[len(check_list)-1]
答案 3 :(得分:0)
如果它不是空行或1行文件,您可以:
my_file = open(root_to file, 'r')
my_lines = my_file.readlines()
first_line = my_lines[0]
last_line = my_lines[-1]