我正在尝试做一些非常基本的事情。我有一个制表符分隔的文本文件,包含 2 行:日期和名称。日期采用 Excel 数字格式。这是一个例子...
Bill to Name Date
James Doe 41929
Jane Doe 41852
Adam Adamson 42244
Adam Adamson 41529
我需要做的是遍历姓名列表,找到每个人的最小日期和最大日期之间的差异,并将其输出到另一个列表。输出列表应该与上面的输入列表类似,只是每个名称只有一个,并且数字会更小。并不是每个人都有超过 1 个约会,有些名字只有 1 个,有些名字有 30 个。我几乎只完成了将文件输入。
input_dir = "C:\\Users\\Intern\\Documents\\"
data_file = "Python.txt"
output_dir = "C:\\Users\\Intern\\Documents\\"
output_file_all = "Tenure.txt"
#testing file input
with open(input_dir + data_file,'r') as ifile :
for idx, row in enumerate(ifile.readlines()) :
print(row)
if idx > 0 :
break
这工作得很好,但是循环让我很困惑。我假设它类似于“对于 ifile 中的每个名称,Tenure = max(date)-min(date)”,但我认为这不会正确迭代。
最佳答案
使用csv module
如果输入文件结构变得更加复杂,将会在将来有所帮助。字典似乎是解决这个问题的正确数据结构。 Defaultdict 使我们无需再多写几行。
import csv
from collections import defaultdict
d = defaultdict( list )
input_file = 'a.csv'
output_file = 'b.csv'
with open( input_file, 'rb' ) as infile:
reader = csv.reader(infile, delimiter='\t')
next(reader, None) # skip the header
for row in reader:
d[ row[0] ].append( int(row[1]) )
with open( output_file, 'wb' ) as outfile:
writer = csv.writer(outfile, delimiter='\t')
for key, value in d.items():
writer.writerow( [key, max(value) - min(value)] )
输出为“b.csv”:
Jane Doe 0
James Doe 0
Adam Adamson 715
关于python - 迭代名称列表并使用最小/最大值创建新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34514875/