视觉CSV读取器什么不保持文件“打开” [英] Visual CSV Reader what doesn't keep the file "open"

查看:198
本文介绍了视觉CSV读取器什么不保持文件“打开”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找一种方式来查看CSV文件,就像你会在Excel(很好的清晰布局)Excel的唯一问题是它不会通知您的更新,也不会关闭文件,一旦开放不像Notepad ++,它允许你看到文件被更新,它也允许你打开文件,然后操纵它让我们说python ...



唯一的问题Notepad ++是不可能轻松读取CSV的。



记事本++




  • 优惠

    • 此文件已被其他程序修改,您要重新加载吗?

    • 视觉上载入资料后关闭档案。

    • 可以轻松比较其他档案。

    li>
  • 缺点

    • 无清晰的视觉效果。

    li>


Excel




  • strong>

    • 清除视觉效果。


  • >

    • 视觉加载数据后不关闭文件。

    • 文件修改后不提醒您

    • 无法与其他档案轻松比较。



    之前



     数据,数据,datalongdatadatalongdata,datalongdata,datalongdata,data,data,data,datalongdata,data,data,data,datalongdata,datalongdata,数据
    数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据
    数据,数据,数据, ,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据
    数据,数据,数据,数据数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据
    数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据, $ b



    之后(查看第5行 data'data



     数据,数据,datalongdatadatalongdata,datalongdata,datalongdata,data,data,data,datalongdata,data,data,data,data ,datalongdata,datalongdata,data 
    data,data,data,data,data,data,data,data,data,data,data,data,data,data,data,data,data
    data,data,data数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据, $ b数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,
    数据,数据,数据,数据,数据


    解决方案

    :)发现 TextFX 中的错误后,我决定使用 Python Script 插件创建更好的东西。 p>

    示例



    它将转换以下示例:

      heeey,this,is,a,testtttttttttt 
    34,3
    123,123,123,123,123

    To:

      + ------------- ---------------------------- + 
    | heeey |这个|是| a | testtttttttttt |
    | 34 | 3 | | | |
    | 123 | 123 | 123 | 123 | 123 |
    + ----------------------------------------- +

    并且:

     数据,数据,数据,数据,数据,数据,数据,数据,数据,数据
    数据,数据,数据,数据,数据,数据,数据,数据,数据,数据,数据

    To:

      + -------- -------------------------------------------------- -------------------------------------------------- ------------------------------------------ + 
    | title1 | title2 | title3 | title4 | title5 | title6 | title7 | title8 | title9 |
    + --------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----- +
    | datalongdata | datalongdata |数据|数据|数据| datalongdata |数据|数据|数据|
    |数据|数据|数据|数据|数据|数据|数据|数据长度datadatalongdatadatalongdatadatalongdatadatalongdata |数据|
    |数据| data'data |数据|数据|数据|数据|数据|数据|数据|
    + --------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----- +



    安装




    1. 安装 Python Script 插件,从插件管理器或从官方网站

    2. 安装后,请转至插件> Python脚本>新脚本。为新文件选择一个文件名(例如 pretty_csv.py )并复制以下代码。

    3. 打开您的csv文件,然后运行插件> Python脚本>脚本> pretty_csv.py 。这将会在您的表格中打开一个新标签页。

    请注意,在脚本的前几行,一些参数。我希望变量名称是不言自明的!我想最重要的是布尔值, border header 。 b
    $ b

      #define parameters 
    delimiter =,
    new_delimiter =|
    border = True
    border_vertical_left =|
    border_vertical_right =|
    border_horizo​​ntal = -
    border_corner_tl =+
    border_corner_tr =+
    border_corner_bl =+
    border_corner_br =+
    = True
    border_header_separator = -
    border_header_left =+
    border_header_right =+
    newline =\\\


    csv
    content = editor.getText()
    content = content.rstrip(newline)
    rows = content.split(newline)

    #find最大数量
    如果max_columns> 0:
    max_columns =列(所以具有不同列数的行是没有问题的)
    max_columns = max([row.count(delimiter) max_columns + 1

    #find每列的最大宽度
    column_max_width = [0] * max_columns
    对于行中的行:
    用于索引,列在枚举中row.split(delimiter)):
    width = len(column)
    if width> column_max_width [index]:
    column_max_width [index] = width
    total_length = sum(column_max_width) + len(new_delimiter)*(max_columns-1)

    #create新文档
    notepad.new()

    #应用更改
    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
    for row_number,enumerate(rows)中的行:
    columns = row.split(delimiter)
    max_index = len(columns)-1
    用于索引范围(max_columns):
    if index> max_index:
    columns.append(''* column_max_width [index])
    else:
    diff = column_max_width [index] -len b $ b columns [index] = columns [index] +''* diff

    如果row_number == 0并且border是True:#draw top border
    editor.addText(border_corner_tl + border_horizo​​ntal * total_length + border_corner_tr + newline)
    editor.addText(left + new_delimiter.join(columns)+ right + newline)#print新行
    如果row_number == 0并且header为True:#draw header分隔符
    editor.addText(left_header + border_header_separator * total_length + right_header + newline)
    如果row_number == len(rows)-1并且border是True:#draw bottom border
    editor.addText border_corner_bl + border_horizo​​ntal * total_length + border_corner_br)
    else:
    console.clear()
    console.show()
    console.writeError(No \%s\如果您发现任何错误或有任何建议,请告诉我!如果您发现任何错误或有任何建议,请告诉我!


    I'm looking for a way to view CSV files as you would in Excel (nice clear layout) the only issue with Excel is that it doesn't notify you of updates nor does it close the file once it's "open" unlike Notepad++ which allows you to see when the file is updated and it also allows you to have the file open then manipluate it in lets say python...

    The only problem with Notepad++ is it's impossible to read a CSV easily..

    Notepad++

    • Pros
      • "This file has been modified by another program, Would you like to reload it?"
      • Closes the file once the data is loaded visually.
      • Can compare against other files easily.
    • Cons
      • No clear visual viewer.

    Excel

    • Pros
      • Clear visual viewer.
    • Cons
      • Doesn't close the file once the data is loaded visually.
      • Doesn't alert you when the file has been modified by another program (you can't modify it if it's open in Excel)
      • Can't compare to another file easily.

    Anyone know of a program to help me?

    Before

    data,data,datalongdatadatalongdata,datalongdata,datalongdata,data,data,data,datalongdata,data,data,data,data,datalongdata,datalongdata,data
    data,data,data,data,data,data,data,data,data,data,data,data,data,data,data,data
    data,data,data,data,data,data,data,data,data,data,data,data,data,data,data,data
    data,data,data,data,data,data,data,data,data,data,data,data,data,data,datalongdatadatalongdatadatalongdatadatalongdatadatalongdata,data
    data,data,data,data,data,data,data,data,data'data,data,data,data,data,data,data,data
    data,data,data,data,data,data,data,data,data,data,data,data,data,data,data,data
    data,data,data,data,data,data,data,data,data,data,data,data,data,data,data,data
    data,data,data,data,data,data,data,data,data,data,data,data,data,datalongdatadatalongdatadatalongdatadatalongdata,data,data
    

    After (Look at line 5 for data'data)

    data,data,datalongdatadatalongdata,datalongdata,datalongdata,data,data,data,datalongdata,data,data,data,data,datalongdata,datalongdata                                                ,data
    data,data,data                    ,data        ,data        ,data,data,data,data        ,data,data,data,data,data        ,data                                                        ,data
    data,data,data                    ,data        ,data        ,data,data,data,data        ,data,data,data,data,data        ,data                                                        ,data
    data,data,data                    ,data        ,data        ,data,data,data,data        ,data,data,data,data,data        ,datalongdatadatalongdatadatalongdatadatalongdatadatalongdata,data
    data,data,data                    ,data        ,data        ,data,data,data,data'data,data,data,data,data,data,data,data
    data,data,data                    ,data        ,data        ,data,data,data,data,data,data,data,data,data,data,data
    data,data,data                    ,data        ,data        ,data,data,data,data,data,data,data,data,data,data,data
    data,data,data                    ,data        ,data        ,data,data,data,data,data,data,data,data,datalongdatadatalongdatadatalongdatadatalongdata,data,data
    

    解决方案

    I'm back with a new answer :) After you found that bug in TextFX, I decided to create something better using the Python Script plugin.

    Examples

    It will convert the following example:

    heeey,this,is,a,testtttttttttt
    34,3
    123,123,123,123,123
    

    To:

    + ----------------------------------------- +
    | heeey | this | is  | a   | testtttttttttt |
    | 34    | 3    |     |     |                |
    | 123   | 123  | 123 | 123 | 123            |
    + ----------------------------------------- +
    

    And the following:

    title1,title2,title3,title4,title5,title6,title7,title8,title9
    datalongdata,datalongdata,data,data,data,datalongdata,data,data,data
    data,data,data,data,data,data,data,datalongdatadatalongdatadatalongdatadatalongdatadatalongdata,data
    data,data'data,data,data,data,data,data,data,data
    

    To:

    + ------------------------------------------------------------------------------------------------------------------------------------------------------ +
    | title1       | title2       | title3 | title4 | title5 | title6       | title7 | title8                                                       | title9 |
    + ------------------------------------------------------------------------------------------------------------------------------------------------------ +
    | datalongdata | datalongdata | data   | data   | data   | datalongdata | data   | data                                                         | data   |
    | data         | data         | data   | data   | data   | data         | data   | datalongdatadatalongdatadatalongdatadatalongdatadatalongdata | data   |
    | data         | data'data    | data   | data   | data   | data         | data   | data                                                         | data   |
    + ------------------------------------------------------------------------------------------------------------------------------------------------------ +
    

    Installation

    1. Install Python Script plugin, from Plugin Manager or from the official website.
    2. When installed, go to Plugins > Python Script > New Script. Choose a filename for your new file (eg pretty_csv.py) and copy the code that follows.
    3. Open your csv file and then run Plugins > Python Script > Scripts > pretty_csv.py. this will open a new tab with your table.

    Please note that in the first few lines of the script you can alter some parameters. I hope that the variables names are self-explanatory! I guess the most important ones are the boolean ones, border and header.

    #define parameters
    delimiter=","
    new_delimiter=" | "
    border=True
    border_vertical_left="| "
    border_vertical_right=" |"
    border_horizontal="-"
    border_corner_tl="+ "
    border_corner_tr=" +"
    border_corner_bl="+ "
    border_corner_br=" +"
    header=True
    border_header_separator="-"
    border_header_left="+ "
    border_header_right=" +"
    newline="\n"
    
    #load csv
    content=editor.getText()
    content=content.rstrip(newline)
    rows=content.split(newline)
    
    #find the max number of columns (so having rows with different number of columns is no problem)
    max_columns=max([row.count(delimiter) for row in rows])
    if max_columns>0:
        max_columns=max_columns+1
    
        #find the max width of each column
        column_max_width=[0]*max_columns
        for row in rows:
            for index,column in enumerate(row.split(delimiter)):
                width=len(column)
                if width>column_max_width[index]:
                    column_max_width[index]=width
        total_length=sum(column_max_width)+len(new_delimiter)*(max_columns-1)
    
        #create new document
        notepad.new()
    
        #apply the changes
        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 ""
        for row_number,row in enumerate(rows):
            columns=row.split(delimiter)
            max_index=len(columns)-1
            for index in range(max_columns):
                if index>max_index:
                    columns.append(' ' * column_max_width[index])
                else:
                    diff=column_max_width[index]-len(columns[index])
                    columns[index]=columns[index] + ' ' * diff
    
            if row_number==0 and border is True: #draw top border
                editor.addText(border_corner_tl + border_horizontal * total_length + border_corner_tr + newline)
            editor.addText(left + new_delimiter.join(columns) + right + newline) #print the new row
            if row_number==0 and header is True: #draw header's separator
                editor.addText(left_header + border_header_separator * total_length + right_header + newline)
            if row_number==len(rows)-1 and border is True: #draw bottom border
                editor.addText(border_corner_bl + border_horizontal * total_length + border_corner_br)
    else:
        console.clear()
        console.show()
        console.writeError("No \"%s\" delimiter found!" % delimiter)
    

    If you find any bugs or have any suggestions please let me know!

    这篇关于视觉CSV读取器什么不保持文件“打开”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆