csv读取的Python编码问题

时间:2018-03-23 18:09:57

标签: python pycharm

有一个简单的代码在哪里 目标:

  
      
  1. 打开一个csv文件作为列表打印 - >
  2.   
  3. 将csv文件作为字典打开

         

    打印 - >工作

         

    修改它 - > 代码是否正确?

         

    再次打印 - >不工作

  4.   

使用Pycharm进行调试,无法识别问题。任何帮助将受到高度赞赏。

import sys
import csv

def print_csv_list(list_in):
    """
    function takes a list of lists and prints # of lines instructed by counter parameter
    :param list_in: list of lists
    :return: no return
    """
    counter = 0
    for line in list_in:
        if counter < 2:
            for item in line:
                sys.stdout.write(item.strip(",") + "\t")
                sys.stdout.flush()
            print("\n")
            counter +=1

def print_csv_file(file_dict):
    for dict_item in file_dict:
        print dict_item

def modify_dict(file_dict):
    print_csv_file(file_dict)
    for dict_item in file_dict:
        for k, v in dict_item.iteritems():
            if k == "ral_file":
                dict_item[k] = v.strip("_regs")
    print_csv_file(file_dict)

def parse_ral_file(csvfile):
    with open(csvfile, 'r')as print_file:
        file_read = csv.reader(print_file, delimiter=',')
        print_csv_file(file_read)
    with open(csvfile, 'r')as dict_file:
        file_dict = csv.DictReader(dict_file, delimiter=',')
        modify_dict(file_dict)

if __name__ == "__main__":
    x = sys.argv[1]
    parse_ral_file(x)

1 个答案:

答案 0 :(得分:2)

当您遍历生成器(包括文件)时,将指针留在末尾。这意味着任何后续迭代都将导致空内容。您需要使用seek并使指针返回文件的开头。

with open(csvfile, 'r')as dict_file:
    modify_dict(dict_file)

def modify_dict(dict_file):
    file_dict = csv.DictReader(dict_file, delimiter=',')
    print_csv_file(file_dict)
    dict_file.seek(0) # If you remove this line, the second `print_csv_file` 
                      # won't print anything
    print_csv_file(file_dict)