在Python中读取文件

9

我是新手,接触 Python 主要是用于图形处理,但对其他问题并不熟悉。我的问题是如何在 Python 中读取带有标头且以制表符或空格分隔的文件。我知道如何读取以逗号分隔的文件,但是对这种方式尚未做过尝试。

ID  YR  MO  DA  YrM  MoM  DaM  
100  2010  2  20  2010  8  2010  30  
110  2010  4  30  2010  9  2010 12     
112  2010  8  20  2010  10  2010  20  

还有一种方法可以找到两个日期之间的天数差吗?

2个回答

21
同样的技术在csv模块中不起作用吗?
import csv
reader = csv.reader(open("filename"), delimiter="\t")

分隔符可以是"\s"或"\t"。

您还可以这样使用DictReader:

f = open(filename, '')
try:
    reader = csv.DictReader(f)
    for row in reader:
        print row
finally:
    f.close()

你可以使用暴力破解技术。
for line in open(filename):
    listWords = line.split("\t")

分割函数:

>>> t = 'ID YR MO DA YrM MoM DaM'
>>> t.split(" ")
['ID', 'YR', 'MO', 'DA', 'YrM', 'MoM', 'DaM']

要计算天数,使用datetime模块:http://docs.python.org/library/datetime.html

>>> import datetime
>>> k = datetime.date(2010, 05, 26) - datetime.date(2010, 02, 10)
>>> k.days
105
>>> 

1
如果我使用CSV读取器,如何访问输入文件中每行的每个元素? - user458858
使用csv.DictReader,标题行将用于读取以下行中每个相应值的键,然后每行将返回一个字典,其中该行的值作为该行字典的值。 - PaulMcG
太好了,从来不知道我可以将csv与非csv文件一起使用。但是使用delimiter="\s"似乎不起作用。 - sykora
2
@sykora:如果你尝试读取的文件中每个值之间都确实存在两个字符的字符串"\s",那么使用"\s"可能会起作用--但这种情况非常罕见。除了制表符"\t"之外,最常见的分隔符(也是默认分隔符)是逗号","。 - martineau
@martineau:pyfunc的回答说“分隔符可以是'\s'或'\t'”。我只是想知道他为什么包括'\s'。我试过了,确实你说的对。 - sykora
+1 如果您能全面回答问题的两个部分,那么这是一个很好的答案。 - martineau

8

对于简单的任务,您可以直接使用 str.split() 方法。如果没有指定分隔符,则 split() 会在空格上进行拆分。

>>> lin="a b c d"
>>> lin.split()
['a', 'b', 'c', 'd']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接