我想根据要删除的不同.txt文件中要删除的数据列表来混淆.csv文件列中出现的单词。
理想情况下,我将能够忽略我的数据的情况,然后在.csv文件中,用In [1048]: %%timeit
...: with open('stack38704949.txt',"r") as f:
...: lines=f.readlines()
...: row_count = len(data)
...: np.genfromtxt('stack38704949.txt',skip_header=row_count-5,delimiter=',')
1000 loops, best of 3: 736 µs per loop
替换“要删除”文件中的匹配单词。我不确定在替换.csv文件中的单词同时忽略大小写的最佳方法是什么。到目前为止我没有工作,我愿意接受解决方案。
示例数据文件:
'*'
我的.txt文件将是要删除的数据列表:
This is a line of text in .csv column that I want to remove a word from or data such as 123 from.
输出应为:
want
remove
123
我的代码:
This is a line of text in .csv column that I **** to ****** a word or data such as *** from.
答案 0 :(得分:0)
我首先要构建一套检查词。我的输入基本上是换行符分隔单词的纯文本文件。如果您的文本文件不同,则可能需要单独解析。
其他想法:
创建单独的审查文件输出,而不是尝试覆盖输入文件。这样,如果你搞砸了算法,你就不会丢失数据。
您在第4列上执行.split(" ")
,只有在该列中有多个单词,空格分隔时才需要for w in csv_words
。如果不是这种情况,您可以跳过import csv
import re
import string
PUNCTUATION_SPLIT_REGEX = re.compile(r'[\s{}]+'.format(re.escape(string.punctuation)))
# construct a set of words to censor
censor_words = set()
with open ('DataToRemove.txt', 'r') as removetxtfile:
for l in removetxtfile:
words = PUNCTUATION_SPLIT_REGEX.split(l)
for w in words:
censor_words.add(w.strip().lower())
with open('MyFileName.csv' , 'rb') as csvfile, open('CensoredFileName.csv', 'w') as f:
reader = csv.reader(csvfile)
# reader.next()
for row in reader:
csv_words = row[3].split(' ') #Gets the word for the 4th column in .csv file
new_column = []
for w in csv_words:
if w.lower() in censor_words:
new_column.append('*'*len(w))
else:
new_column.append(w)
row[3] = ' '.join(new_column)
f.write(' '.join(row) + '\n')
循环,循环遍历第4列中的所有单词。
data.table