Python:遍历 CSV 的每一行,计算每行中的令牌,创建一个新的 CSV,其中包含原始 CSV 的每一行的令牌数量



(

我有一个看起来像这样的 CSV 文件:

块引用

  • 身份证件内容
  • 文本
  • 1 这里有一些文本
  • 文本
  • 2 她也来了一些文本
  • 文本 3 等等,等等...

块引用

我想编写一个代码来迭代此 CSV 表的每一行。 然后计算每行中的标记数(例如每个文本( 然后创建一个新的 CSV 表作为输出,其中应该只是文本中带有标记数量的文本 ID。

块引用

输出 CSV 文件应如下所示:

  • 令牌编号
  • 文本 1 8
  • 案文2 12
  • 文本3 15

块引用

到目前为止,我有这个代码:

import csv
from textblob_de import TextBlobDE as TextBlob
data = open('myInputFile.csv', encoding="utf-8").readlines()
blob = TextBlob(str(data))

csv_file = open('myOutputFile.csv', 'w', encoding="utf-8")
csv_writer = csv.writer(csv_file)
# Define the Headers of the CSV
csv_writer.writerow(['Text-ID', 'Tokens])

def numOfWordTokens(document):
myList = []
for eachRow in document:
myList.append(eachRow)
return "n".join(myList)
#return eachRow
#print(eachRow)
# Count Tokens
#countTokens = len(wordTokens2.split()) # Output: integer
#return countTokens
#myList.append(str(countTokens))

wordTokens = numOfWordTokens(data)
# Write Content in the CSV-Table Rows
csv_writer.writerow([wordTokens])
csv_file.close()

那么,首先我有以下问题?

当我返回每个行时,我在 Shell 中没有得到任何输出,只有 1. 行作为新创建的 CSV 文件中的输出。 当我打印(每行(时,我实际上将每一行打印为Shell中的输出,但是我新创建的CSV文件只是空的!

所以这是我遇到问题的第一部分,所以我不能继续转到我实际计算每行中的令牌并将令牌数写入新的 CSV 文件中的部分。

使用pandas非常简单,但是如果您不想使用其他模块,那也没关系:) 我添加了熊猫和手动迭代数据的代码:

import pandas as pd
import csv

def main_pandas(path_to_csv: str, target_path: str):
df = pd.read_csv(path_to_csv, encoding='utf-8')
df['tokens'] = df['Content'].apply(lambda x: len(x.split()))
sub_df = df[['ID', 'tokens']]
sub_df.to_csv(target_path, index=False)

def main_manual(path_to_csv: str, target_path: str):
with open(path_to_csv, 'r') as r_fp:
csv_reader = csv.reader(r_fp)
next(csv_reader)  # Skip headers
with open(target_path, 'w') as w_fp:
csv_writer = csv.writer(w_fp)
csv_writer.writerow(['Text ID', 'tokens'])  # Write headers
for line in csv_reader:
text_id, text_content = line
csv_writer.writerow([text_id, len(text_content.split())])

if __name__ == '__main__':
main_manual('text.csv', 'tokens.csv')

最新更新