)
我有一个如下所示的CSV文件:
Blockquote
Blockquote
我想编写一个代码来遍历此CSV表的每一行。 然后计算每行(例如每个文本)中令牌的数量 然后,创建一个新的CSV表作为输出,该表中应仅是带有该文本中令牌数量的Text-ID。
Blockquote
输出CSV文件应如下所示:
Blockquote
到目前为止,我有以下代码:
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()
那么,首先我有以下问题?
当我确实返回eachRow时,在Shell中没有任何输出,而在新创建的CSV文件中只有1.行作为输出。 当我打印(eachRow)时,实际上在Shell中将每一行打印为Output,但是我新创建的CSV文件只是空的!
所以这是我遇到的第一部分,因此我无法继续去实际计算每一行中的令牌并将令牌数量写入新CSV文件的部分。
答案 0 :(得分:0)
用熊猫超级简单,但是如果您不想使用其他模块,那也很好:) 我已经为两个熊猫以及手动遍历数据添加了代码:
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')