我在CSV文件中有数据twitter(我使用Python API进行挖掘)。我获得了大约1000行数据。现在我想使用特定的印尼语单词“macet”或“kecelakaan”(英文“traffic”或“accident”)来缩短推文数据,并将匹配的行放入一个新的单独的CSV文件中,就像在Excel中使用{{ 1}}。
示例数据twitter是example1.csv和将在搜索单词" macet"之后创建的新文件。或" kecelakaan"是example2.csv。但是没有结果。
find all
我将spyder用于环境Python 3.6。
CSV文件已与Spyder位于同一文件夹中。这是我的CSV推特数据的屏幕截图图像
已更新:Sample of csv file。操作系统使用:Windows
答案 0 :(得分:2)
您的代码存在一些问题。
在您的阅读循环中,您将csv.reader
对象传递给re.search
,但它并不知道如何搜索该对象。您需要传递文本或字节字符串。
该行
myData = list(row)
将row
转换为新列表并将其保存到myData
,但它已经是列表,因此无需转换。该行替换了myData
的先前内容,但您实际上想要保存所有匹配的行。但是,没有必要保存行,您可以随时将它们写入新文件。
无论如何,这是修复后的代码版本。从屏幕截图看,您似乎只想搜索输入数据的第2列中的文本(对应于电子表格中的C列)。我创建了一个正则表达式来搜索整个单词" macet" " kecelakaan"," \ b"如果" macet"匹配字边界,那么我们就不会得到匹配。或" kecelakaan"是一个更大词的一部分。
import re
import csv
# Make a case-insensitive regex to match the words "macet" or "kecelakaan"
pattern = re.compile(r'\bmacet\b|\bkecelakaan\b', re.I)
with open('example1.csv', 'r', newline='') as csvFile, open('example2.csv', 'w', newline='') as newFile:
reader = csv.reader(csvFile)
writer = csv.writer(newFile)
for row in reader:
# Skip empty rows
if not row:
continue
if pattern.search(row[2]):
print(row)
writer.writerow(row)
print("Writing complete")
我刚刚对该代码做了一些改进。它现在使用newline=''
arg打开CSV文件,它会跳过输入CSV中的任何空行。正在寻找匹配的单词时,正则表达式现在忽略了这种情况。
答案 1 :(得分:0)
没有回答有关Python的问题。但是,如果您有Linux操作系统,则可以在一个命令行中执行此操作:
grep -i "macet" exemple1.csv > exemple2.csv
-i用于忽略大小写,因此它也匹配“Macet”
答案 2 :(得分:0)
怎么回事〜? 此代码逐个访问行 并在word_list中查找包含单词的单元格 并在行上写下值列表
est