最近我有一个关于数据类型的问题。
从那以后,我一直在尝试使用NamedTuples(或多或少是成功的)。
我目前的问题:
-如何将文件中的行导入新元组,
-如何将用空格/tab(/whatever)分隔的值导入元组的给定部分?
比如:
Monday 8:00 10:00 ETR_28135 lh1n1522 Computer science 1
Tuesday 12:00 14:00 ETR_28134 lh1n1544 Geography EA 1
第一行应该进入元组[0]。第一个数据:tuple[0].day;第二个数据:tuple[0].start;。依此类推。
当新行开始时(这是两个TAB(\t),启动一个新的元组,如tuple[1])。
我用这个来分离数据:
with open(Filename) as f: for line in f: rawData = line.strip().split('\t')
剩下的逻辑仍然缺失(元组的填充)。
(我知道。这个问题,还有最近的一个,都是很低级的问题。不过,希望这些也能帮助别人。如果你觉得这不是一个真正的问题,太简单而不是一个问题等等,就投票结束吧。感谢您的理解。)
这里有一个紧凑的方法来做这些事情。 首先声明行项目的类:
下一部分在你的循环中。
现在慢慢地:
zip(fields, raw_data)
创建成对的列表,如[("dow", "Monday"), ("open_time", "8:00"),..]
dict()
把它变成字典,就像{"dow": "Monday", "open_time": "8:00", ..}
**
将此字典解释为Item
构造函数的一组关键字参数,相当于Item(dow="Monday", open_time="8:00",..)
。所以你的项被命名为元组,所有的值都是字符串。
编辑:
如果字段的顺序不会更改,则可以更轻松地执行此操作:
这使用了文件中字段的顺序和
Item
定义中参数的顺序匹配这一事实。这种数据库文件被称为逗号分隔值,即使它们不是真正由逗号分隔的。Python有一个叫做
csv
的便利库,可以让您轻松地读取这些文件这里有一个稍微修改过的example from the docs
通常你一次只能工作一行。如果需要一个元组中的整个文件,则:
编辑
如果需要按名称访问字段,可以使用cvs.DictReader,但我不知道具体是如何工作的,因此无法在这里进行测试。
编辑2
看看namedtuples是什么,我有点过时了。有一个很好的例子说明了namedtuple如何与csv模块一起工作:
如果要使用NamedTuple,可以使用Python文档中给出的示例的稍加修改的版本:
相关问题 更多 >
编程相关推荐