栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Python中漂亮地打印CSV文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Python中漂亮地打印CSV文件

用法:

pretty.pretty_file( filename options )**

读取CSV文件并将数据作为表格直观地打印到新文件中。 filename ,是给定的CSV文件。可选的** options

关键字参数是Python标准库csv模块的方言和格式参数以及以下列表的并集:

  • new_delimiter :新的列分隔符( 默认为 “ |”)
  • border :如果要打印表格的边框,则为布尔值( 默认为 True)
  • border_vertical_left :表格的左边框( 默认为 “ |”)
  • border_vertical_right :表格的右边框( 默认为 “ |”)
  • border_horizo​​ntal :表格的顶部和底部边框( 默认为 “-”)
  • border_corner_tl :表格的左上角( 默认为 “ +”)
  • border_corner_tr :表格的右上角( 默认为 “ +”)
  • border_corner_bl :表格的左下角( 默认border_corner_tl 相同)
  • border_corner_br :表格的右下角( 默认border_corner_tr 相同)
  • header :布尔值,如果第一行是表头( 默认为 True)
  • border_header_separator :标题和表格之间的边界( 默认border_horizo​​ntal 相同)
  • border_header_left :表标题的左边框( 默认border_corner_tl 相同)
  • border_header_right :表标题的右边框( 默认border_corner_tr 相同)
  • new_filename :新文件的文件名( 默认为 “ new_” + filename
  • newline :定义如何分隔表的行( 默认为 “ n”)

例:

import pretty_csvpretty_csv.pretty_file("test.csv", header=False, border=False, delimiter="|")

Python 3:

这是一个Python 2实现。对于Python 3,您必须将两次出现的行更改为

open(filename, "rb") asinput:
open(filename, "r", newline="") as input:
因为
csv.reader
在Python
3中希望以文本模式打开文件。

模块:

import csvimport osdef pretty_file(filename, **options):    """    @summary:        Reads a CSV file and prints visually the data as table to a new file.    @param filename:        is the path to the given CSV file.    @param **options:        the union of Python's Standard Library csv module Dialects and Formatting Parameters and the following list:    @param new_delimiter:        the new column separator (default " | ")    @param border:        boolean value if you want to print the border of the table (default True)    @param border_vertical_left:        the left border of the table (default "| ")    @param border_vertical_right:        the right border of the table (default " |")    @param border_horizontal:        the top and bottom border of the table (default "-")    @param border_corner_tl:        the top-left corner of the table (default "+ ")    @param border_corner_tr:        the top-right corner of the table (default " +")    @param border_corner_bl:        the bottom-left corner of the table (default same as border_corner_tl)    @param border_corner_br:        the bottom-right corner of the table (default same as border_corner_tr)    @param header:        boolean value if the first row is a table header (default True)    @param border_header_separator:        the border between the header and the table (default same as border_horizontal)    @param border_header_left:        the left border of the table header (default same as border_corner_tl)    @param border_header_right:        the right border of the table header (default same as border_corner_tr)    @param newline:        defines how the rows of the table will be separated (default "n")    @param new_filename:        the new file's filename (*default* "/new_" + filename)    """    #function specific options    new_delimiter= options.pop("new_delimiter", " | ")    border       = options.pop("border", True)    border_vertical_left    = options.pop("border_vertical_left", "| ")    border_vertical_right   = options.pop("border_vertical_right", " |")    border_horizontal       = options.pop("border_horizontal", "-")    border_corner_tl        = options.pop("border_corner_tl", "+ ")    border_corner_tr        = options.pop("border_corner_tr", " +")    border_corner_bl        = options.pop("border_corner_bl", border_corner_tl)    border_corner_br        = options.pop("border_corner_br", border_corner_tr)    header       = options.pop("header", True)    border_header_separator = options.pop("border_header_separator", border_horizontal)    border_header_left      = options.pop("border_header_left", border_corner_tl)    border_header_right     = options.pop("border_header_right", border_corner_tr)    newline      = options.pop("newline", "n")    file_path = filename.split(os.sep)    old_filename = file_path[-1]    new_filename = options.pop("new_filename", "new_" + old_filename)    column_max_width = {} #key:column number, the max width of each column    num_rows = 0 #the number of rows    with open(filename, "rb") as input: #parse the file and determine the width of each column        reader=csv.reader(input, **options)        for row in reader: num_rows += 1 for col_number, column in enumerate(row):     width = len(column)     try:         if width > column_max_width[col_number]:  column_max_width[col_number] = width     except KeyError:         column_max_width[col_number] = width    max_columns = max(column_max_width.keys()) + 1 #the max number of columns (having rows with different number of columns is no problem)    if max_columns > 1:        total_length = sum(column_max_width.values()) + len(new_delimiter) * (max_columns - 1)        left = border_vertical_left if border is True else ""        right = border_vertical_right if border is True else ""        left_header = border_header_left if border is True else ""        right_header = border_header_right if border is True else ""        with open(filename, "rb") as input: reader=csv.reader(input, **options) with open(new_filename, "w") as output:     for row_number, row in enumerate(reader):         max_index = len(row) - 1         for index in range(max_columns):  if index > max_index:      row.append(' ' * column_max_width[index]) #append empty columns  else:      diff = column_max_width[index] - len(row[index])      row[index] = row[index] + ' ' * diff #append spaces to fit the max width         if row_number==0 and border is True: #draw top border  output.write(border_corner_tl + border_horizontal * total_length + border_corner_tr + newline)         output.write(left + new_delimiter.join(row) + right + newline) #print the new row         if row_number==0 and header is True: #draw header's separator  output.write(left_header + border_header_separator * total_length + right_header + newline)         if row_number==num_rows-1 and border is True: #draw bottom border  output.write(border_corner_bl + border_horizontal * total_length + border_corner_br)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639751.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号