【问题标题】:How does one type hint a csv reader returned by csv.reader()?一种类型如何提示 csv.reader() 返回的 csv 阅读器?
【发布时间】:2023-01-22 11:34:48
【问题描述】:

一种类型如何提示 csv.reader() 返回的 csv 阅读器? 当我在 python 中检查结果的类型时,我看到:

>>> import csv
>>> with open('upt.csv', newline='') as csvfile:
...   reader = csv.reader(csvfile, delimiter=' ', quotechar='|')
... 
>>> reader
<_csv.reader object at 0x10c5292e0>
>>> type(reader)
<class '_csv.reader'>
>>> reader.__class__
<class '_csv.reader'>
>>> import _csv
>>> _csv.reader
<built-in function reader>
>>> _csv.reader.__class__
<class 'builtin_function_or_method'>

因此它将阅读器的类类型描述为 _csv.reader 但是当我导入不是类的 _csv.reader 时它是一个函数。如何为 csv.reader 类实例创建类型提示?

文档:https://docs.python.org/3/library/csv.html?highlight=csv#csv.reader 不要使用类来描述返回类型。

奇怪的是,我确实在 _csv.reader 上看到了像 __init__ 和 __new__ 这样的类方法,所以这可能是一个 c/c 绑定问题? &gt;&gt;&gt; dir(_csv.reader) ['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']

笔记: DictReader 没有这个问题:

>>> with open('upt.csv', newline='') as csvfile:
...   dreader = csv.DictReader(csvfile)
... 
>>> dreader
<csv.DictReader object at 0x10c410a30>
>>> csv.DictReader
<class 'csv.DictReader'>

【问题讨论】:

    标签: python-3.x csv file


    【解决方案1】:

    我创建了一个函数,其中提到了要读取的文件名

    
    from common import read_csv_file
    
    def get_info_data():
    
        # Read csv file
        stored_obj_list = read_csv_file('path/filename.csv*')
    
        yield stored_obj_list
    

    读取 csv 文件的主要功能在类下的 common.py 文件中,这就是我输入提示功能的方式。 文件名是海峡 read_csv_file('路径/文件名.csv')如上所述,返回类型是列表对象的存储对象列表

        def read_csv_file(file_name: str) -> list:
            stored_obj_list = []
            try:
                with open(file_name) as csvfile:
                    data_reader = csv.DictReader(csvfile)
                    # This skips the first row of the CSV file.
                    for row in data_reader:
                        stored_obj_list.append(GetDataFromCsv(row))   #GetDataFromCsv is a class I am creating object for each line of data, you can ignore if not requrired
            except FileNotFoundError as er:
                print(er)
    
            return stored_obj_list
    

    那么在你的情况下你想从 read_csv_file 返回什么? 我相信你的案例文件名应该只是 str 。

    【讨论】:

    • 这如何回答问题How does one type hint a csv reader returned by csv.reader()?
    猜你喜欢
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 2010-12-31
    • 2020-05-21
    • 2015-11-23
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    相关资源
    最近更新 更多