csv 计数;形成tsv文件

91zkwejq  于 2023-05-11  发布在  其他
关注(0)|答案(3)|浏览(124)

我试图计算的平均长度的路径在一个tsv文件。路径中的项目由“”分隔;“。tsvfile看起来像这样。
格式:[hashedIpAddress] [timestamp] [durationInSec] [path] [rating]

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]

我怎么数';”在文件?

iovurdzv

iovurdzv1#

使用 indexing,而不是slicing,来获取单个列:

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)
q8l4jmvw

q8l4jmvw2#

我只使用;作为分隔符,如果您的唯一目标是计算分号,则使用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 ';'
qni6mghb

qni6mghb3#

可以使用split方法:

paths = row[3].split(";")
print len(paths) - 1

这将计算行中;个字符的数量。如果要计算按;拆分的元素,请删除-1部分

相关问题