Python - 如何在循环中获取最后一行

时间:2014-08-13 07:41:53

标签: python csv iteration

我有一些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()

4 个答案:

答案 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]