2011-09-09 63 views
0

我有一个数据文件(un-structed messy文件),我必须从中删除特定的字符串列表(删除字符串)。Python:从文件中删除特定的字符串

下面是我在做什么,但没有结果:

infile = r"messy_data_file.txt" 
outfile = r"cleaned_file.txt" 

delete_list = ["firstname1 lastname1","firstname2 lastname2"....,"firstnamen lastnamen"] 
fin=open(infile,"") 
fout = open(outfile,"w+") 
for line in fin: 
    for word in delete_list: 
     line = line.replace(word, "") 
    fout.write(line) 
fin.close() 
fout.close() 

当我执行该文件,我得到以下错误:

NameError: name 'word' is not defined 

请帮帮忙!

+0

您是否收到任何类型的错误,或者它只是不输出文件,但脚本似乎执行? – mwan

+0

不,我没有收到任何错误..该文件似乎执行。 .py文件是否生成我可以查看的日志文件。我没有看到目录中的任何内容。 – Zenvega

+0

执行后,clean_file.txt是否存在? – billinkc

回答

7

readlines方法返回的线,而不是单词的列表,让你的代码只会工作的地方你的话一个是通过自身的线。

由于files are iterators过线可以做到这一点很容易:

infile = "messy_data_file.txt" 
outfile = "cleaned_file.txt" 

delete_list = ["word_1", "word_2", "word_n"] 
fin = open(infile) 
fout = open(outfile, "w+") 
for line in fin: 
    for word in delete_list: 
     line = line.replace(word, "") 
    fout.write(line) 
fin.close() 
fout.close() 
+0

感谢罗斯..我试过你的代码,除了我没有看到optput文件。不知道为什么它没有被创建。 – Zenvega

+0

上面的作品对我来说 –

+0

Appologies,我想删除字符串..不知道如何使代码工作。 – Zenvega

1

基于您的评论:“我双击.py文件似乎要调用的几秒钟后消失的Python应用程序。 。我没有想到任何错误“我相信你的问题是脚本没有找到输入文件。这也是为什么你没有得到任何输出。当你双击它时......我实际上不记得解释器在哪里看,但我认为它是安装python.exe的地方。

使用像这样的标准路径。

# Depends on your OS 
infile = r"C:\tmp\messy_data_file.txt" 
outfile = r"C:\tmp\cleaned_file.txt" 

infile = r"/etc/tmp/messy_data_file.txt" 
outfile = r"/etc/tmp/cleaned_file.txt" 

另外,为了您的理智,请从命令行运行它而不是双击。捕获错误/输出会容易得多。

+0

谢谢。我遵循你的建议。我看到一个为空的clean_file.txt。当我在命令提示符下运行脚本时,我在fout.write(line)处得到一个错误。它说ValueError:关闭文件的I/O操作。不知道是什么原因造成的。 – Zenvega

+2

问一个关于如何运行它的更新代码和更新信息的新问题。 –

1

到同一个文件中删除该字符串,我用这个代码

f = open('./test.txt','r') 
a = ['word1','word2','word3'] 
lst = [] 
for line in f: 
    for word in a: 
     if word in line: 
      line = line.replace(word,'') 
    lst.append(line) 
f.close() 
f = open('./test.txt','w') 
for line in lst: 
    f.write(line) 
f.close() 
0

到OP, 罗斯帕特森的上述方法完全适用于我,即

infile = "messy_data_file.txt" 
outfile = "cleaned_file.txt" 

delete_list = ["word_1", "word_2", "word_n"] 
fin = open(infile) 
fout = open(outfile, "w+") 
for line in fin: 
    for word in delete_list: 
     line = line.replace(word, "") 
    fout.write(line) 
fin.close() 
fout.close() 

例子:

我有一个名为messy_data_file.txt的文件,其中包含以下单词(动物),不一定在同一行上。就像这样:

Goat 
Elephant 
Horse Donkey Giraffe 
Lizard 
Bird 
Fish 

当我修改代码来读取(实际上只是增加的话,删除了“delete_list”行):

infile = "messy_data_file.txt" 
outfile = "cleaned_file.txt" 

delete_list = ["Donkey", "Goat", "Fish"] 
fin = open(infile) 
fout = open(outfile, "w+") 
for line in fin: 
    for word in delete_list: 
     line = line.replace(word, "") 
    fout.write(line) 
fin.close() 
fout.close() 

由此产生的“cleaned_file.txt”看起来是这样的:

Elephant 
Horse Giraffe 
Lizard 
Bird 

有一个空行,其中“喜羊羊”曾经是(其中,奇怪的是,除去“驴”没有),但对于我而言,这工作正常。

我也加了输入(“按回车键退出...”)代码的最后部分,当我双击remove_text时,保持命令行窗口不会打开和关闭.py文件来运行它,但请注意,您不会以这种方式捕获错误。

为了做到这一点我在命令行中运行(其中C:\ Just_Testing是目录,我的所有文件,即remove_text.py和messy_text.txt) 这样的:

C:\Just_Testing\>py remove_text.py 

C:\Just_Testing>python remove_text.py 

的作品完全一样。

当然,就像写HTML的时候,我想这绝不会伤害到使用完全限定的路径运行,从比你碰巧目录之外的其他地方PY或Python时要坐在,如:

C:\Windows\System32\>python C:\Users\Me\Desktop\remove_text.py 

过程中的代码,这将是:

infile = "C:\Users\Me\Desktop\messy_data_file.txt" 
outfile = "C:\Users\Me\Desktop\cleaned_file.txt" 

小心使用相同的完全合格的路径,将您的新创建的cleaned_file.txt或将创建不论身在何处,并可能导致混乱的时候寻找它。

就我个人而言,我的环境变量中的PATH指向我所有的Python安装,即C:\ Python3.5.3,C:\ Python2.7.13等,因此我可以从任何地方运行py或python。

无论如何,我希望对Patterson先生的这段代码进行微调,可以准确地获得您需要的内容。 :)

相关问题