我试图计算一个tsv文件中路径的平均长度。路径中的项目用";“分隔。The文件看起来像这样。
格式: hashedIpAddress durationInSec评级
6a3701d319fc3754 1297740409 166 14th_century;15th_century;16th_century;Pacific_Ocean;Atlantic_Ocean;Accra;Africa;Atlantic_slave_trade;African_slave_trade NULL
3824310e536af032 1344753412 88 14th_century;Europe;Africa;Atlantic_slave_trade;African_slave_trade 3
415612e93584d30e 1349298640 138 14th_century;Niger;Nigeria;British_Empire;Slavery;Africa;Atlantic_slave_trade;African_slave_trade NULL我的密码是:
import csv
count=0
with open('paths_finished.tsv', 'rb') as tsvfile:
a = csv.reader(tsvfile,dialect='excel-tab')
for row in a:
# if row[3:4] == ';':
# count++
print row[1:4]如何计算文件中的“;”号?
发布于 2014-04-02 15:55:31
使用索引,而不是切片,可以获得一个单独的列:
for row in a:
article_count = len(row[3].split(';'))在';'上拆分特定的列文本会给出一个元素列表;len()告诉您有多少个元素。
或者,计算;字符,添加一个:
for row in a:
article_count = row[3].count(';') + 1但是,也许您也想对路径元素本身做些什么。
要获得所有路径的平均长度,我只需使用.count()
total = 0
count = 0
for row in a:
total += row[3].count(';') + 1
count += 1
average = total / float(count)在这种情况下,您甚至不需要使用csv模块;您根本不需要将行拆分成行,其他列中没有;分号,所以更简单的解决方案是只遍历文件的行:
with open('paths_finished.tsv', 'rb') as tsvfile:
total = 0
count = 0
for line in tsvfile:
total += line.count(';') + 1
count += 1
average = total / float(count)发布于 2014-04-02 15:55:22
您可以使用split方法:
paths = row[3].split(";")
print len(paths) - 1这将计算行中的;字符数。如果要计算被-1拆分的元素,请删除;部件
发布于 2014-04-02 15:57:08
我只使用;作为分隔符,如果您的唯一目标是计数分号,则使用len(row) - 1。
即
with open('paths_finished.tsv', 'rb') as tsvfile:
a = csv.reader(tsvfile,dialect='excel-tab',delimiter=';')
for row in a:
print len(row)-1 # subtract 1 for counting ';'https://stackoverflow.com/questions/22816833
复制相似问题