python - 有没有更好的方法来忽略文件中的标题?
问题描述
我在 python 中编写了一个文件读取代码文件。但我不喜欢我的方法,例如使用next(iter)
忽略标题。我需要一些建议来改进此代码。
文件格式:
OrderId, OrderName
1, Washing powder
2, Diaper
3, Cola
4, ToothPaste
5, Handfree
代码:
def set_order_details(self):
order_record = self.order_file.readlines()
iter_order = iter(order_record)
next(iter_order) #For removing Headers
for order_detail in iter_order:
order_and_detail = order_detail.rstrip().split(',')
if len(order_and_detail) == 2:
self.order_dictionary[(order_and_detail[0])] = OrderDepth(order_and_detail[1])
return self.order_dictionary
class OrderDepth:
def __init__(self, order):
self.order = order
self.depth = 0
解决方案
您有一个CSV 格式文件,因此使用内置csv.DictReader
类的实例对其进行处理是有意义的,并且可以通过自动跳过标题来简化代码,并使代码更具可读性。
还要注意,您根本不需要使用iter()
,因为像文件一样,csv.DictReader
实例已经是可迭代的。
由于您的示例代码不包含完整的类,因此我制作了一个用于演示目的,并且还向该类添加了一个__repr__()
方法以OrderDepth
使打印它们更具可读性。
import csv
from pprint import pprint
class OrderDepth:
def __init__(self, order, depth=0):
self.order = order
self.depth = depth
def __repr__(self):
classname = self.__class__.__name__
return f'{classname}(order={self.order!r}, depth={self.depth})'
class Foo:
def __init__(self, filename):
self.csv_file = open(filename, 'r', newline='')
self.order_file = csv.DictReader(self.csv_file, skipinitialspace=True)
def set_order_details(self):
self.order_dictionary = {}
for order_detail in self.order_file:
if len(order_detail) == 2:
od = OrderDepth(order_detail['OrderName'])
self.order_dictionary[order_detail['OrderId']] = od
return self.order_dictionary
foo = Foo("orders.csv")
order_dictionary = foo.set_order_details()
pprint(order_dictionary)
样本输出:
{'1': OrderDepth(order='Washing powder', depth=0),
'2': OrderDepth(order='Diaper', depth=0),
'3': OrderDepth(order='Cola', depth=0),
'4': OrderDepth(order='ToothPaste', depth=0),
'5': OrderDepth(order='Handfree', depth=0)}
推荐阅读
- python - 带有 KWARGS 的 Python Pickle 自定义类会导致类型错误。我如何处理 kwargs?
- reactjs - 如何在 ReactJs 中仅在 Home 组件上呈现特定组件?
- react-native - 反应原生重新选择错误选择器创建者,除了所有输入
- haskell - Haskell - 将联合列表转换为列表元组
- spring-security - 连接被拒绝 - 无法获取用户详细信息 - 尝试访问身份验证服务器时
- python - Python 资源模块不支持“管道大小”和“虚拟内存”资源限制
- reactjs - 如何在 Next js 中集成 React Odometerjs
- bulkinsert - 将 csv 文件加载到 SQL Server 表中
- python - 将多位数字相加直到返回单个数字的函数
- javascript - 在同一个对象Javascript的另一个值中使用一个对象值