Python 将字符串写入另一个文件

Python 将字符串写入另一个文件,python,file,Python,File,问题-更新: inputFile = open ('c:/folder/Thefile.txt', 'r') outputFile = open ('c:/folder/ExtractedFile.txt', 'w') tempStore = outputFile for line in inputFile: for word in line.split(): if ':' in word: splitting = word.split(':')[

问题-更新:

inputFile = open ('c:/folder/Thefile.txt', 'r')
outputFile = open ('c:/folder/ExtractedFile.txt', 'w')
tempStore = outputFile
for line in inputFile:
    for word in line.split():
        if ':' in word:
            splitting = word.split(':')[-1]
            tempStore.writelines(splitting +'\n')
            print splitting

inputFile.close()
outputFile.close()
我可以把脚本打印出来,但很难找到一种方法将标准输出放在文件中而不是屏幕上。下面的脚本用于将结果打印到屏幕上。我在这段代码之后发布了解决方案,滚动到底部的[solution]

第一篇帖子:

inputFile = open ('c:/folder/Thefile.txt', 'r')
outputFile = open ('c:/folder/ExtractedFile.txt', 'w')
tempStore = outputFile
for line in inputFile:
    for word in line.split():
        if ':' in word:
            splitting = word.split(':')[-1]
            tempStore.writelines(splitting +'\n')
            print splitting

inputFile.close()
outputFile.close()
我正在使用Python 2.7.3。我试图提取冒号(
)后文本文件的最后一个单词,并将它们写入另一个txt文件。到目前为止,我能够在屏幕上打印结果,它工作得很好,但是当我尝试将结果写入新文件时,它给了我
str没有属性write/writeline
。下面是代码片段:

# the txt file I'm trying to extract last words from and write strings into a file
#Hello:there:buddy
#How:areyou:doing
#I:amFine:thanks
#thats:good:I:guess

x = raw_input("Enter the full path + file name + file extension you wish to use: ")
def ripple(x):
  with open(x) as file:
    for line in file:
      for word in line.split():
        if ':' in word:
          try:
            print word.split(':')[-1]
          except (IndexError):
            pass 

ripple(x) 
当打印到屏幕上时,上面的代码可以完美地工作。然而,我花了数小时阅读Python文档,似乎找不到将结果写入文件的方法。我知道如何打开文件并使用writeline、readline等进行写入,但它似乎无法使用字符串

对如何实现这一目标有何建议

PS:我没有添加导致写入错误的代码,因为我认为这样更容易查看

第一篇文章的结尾

解决方案-更新:

inputFile = open ('c:/folder/Thefile.txt', 'r')
outputFile = open ('c:/folder/ExtractedFile.txt', 'w')
tempStore = outputFile
for line in inputFile:
    for word in line.split():
        if ':' in word:
            splitting = word.split(':')[-1]
            tempStore.writelines(splitting +'\n')
            print splitting

inputFile.close()
outputFile.close()
使用下面的代码设法让python提取并保存到另一个文件中

代码:

inputFile = open ('c:/folder/Thefile.txt', 'r')
outputFile = open ('c:/folder/ExtractedFile.txt', 'w')
tempStore = outputFile
for line in inputFile:
    for word in line.split():
        if ':' in word:
            splitting = word.split(':')[-1]
            tempStore.writelines(splitting +'\n')
            print splitting

inputFile.close()
outputFile.close()
更新:

inputFile = open ('c:/folder/Thefile.txt', 'r')
outputFile = open ('c:/folder/ExtractedFile.txt', 'w')
tempStore = outputFile
for line in inputFile:
    for word in line.split():
        if ':' in word:
            splitting = word.split(':')[-1]
            tempStore.writelines(splitting +'\n')
            print splitting

inputFile.close()
outputFile.close()
签出droogans代码比我的更有效。

试试这个:

with open('workfile', 'w') as f:
    f.write(word.split(':')[-1] + '\n')
如果确实要使用
打印
方法,可以:

from __future__ import print_function
print("hi there", file=f)

根据。如果您使用的是python 2,则应该添加
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu导入,如果您使用的是python 3,则导入已经存在。


要么你的参数弄混了(你需要调用
fileobject.write(yourdata)
,而不是
yourdata.write(fileobject)
),要么你不小心在打开的目标文件对象和存储字符串中重复使用了同一个变量。

我认为你的问题很好,当你完成后,您应该去查看代码,了解我注意到的其他事项:

# the txt file I'm trying to extract last words from and write strings into a file
#Hello:there:buddy
#How:areyou:doing
#I:amFine:thanks
#thats:good:I:guess
首先,感谢您将示例文件内容放在问题的顶部

x = raw_input("Enter the full path + file name + file extension you wish to use: ")
我认为这部分没有必要。只需为
ripple
创建一个比
x
更好的参数即可。我认为
文件\u loc
是一个相当标准的文件

def ripple(x):
  with open(x) as file:
使用
打开
,您可以标记文件上发生的操作。我还喜欢根据文件对象的工作来命名它。换句话说,
将open(file_loc,'r')作为r:
提醒我,
r.foo
将是我正在读取的文件

    for line in file:
      for word in line.split():
        if ':' in word:
首先,您的
for word in line.split()
语句只将“Hello:there:buddy”字符串放入一个列表:
[“Hello:there:buddy”]
。一个更好的方法是传递
split
一个参数,它或多或少地完成了您在这里试图做的事情。例如,
“Hello:there:buddy”.split(“:”
)将输出
[“Hello”,“there”,“buddy']
,使您对冒号的搜索成为一项已完成的任务

          try:
            print word.split(':')[-1]
          except (IndexError):
            pass 
另一个优点是您不需要检查
索引器
,因为您至少有一个空字符串,当拆分时,它会作为空字符串返回。换句话说,它不会为那行写任何东西

ripple(x) 
对于
ripple(x)
,您可以调用
ripple('/home/user/sometext.txt')

所以,试着看一下这个,并探索代码审查。有一个叫的家伙,他在Python和自称的新手身上做了非常棒的工作。我总是从那个家伙那里学到新的把戏

这是我对它的看法,重新写出来:

import os #for renaming the output file

def ripple(file_loc='/typical/location/while/developing.txt'):
    outfile = "output.".join(os.path.basename(file_loc).split('.'))

    with open(outfile, 'w') as w:
        lines = open(file_loc, 'r').readlines() #everything is one giant list
        w.write('\n'.join([line.split(':')[-1] for line in lines]))

ripple()

试着把它一行一行地分解,然后改变周围的事物。它非常简洁,但一旦你学会理解并使用列表,用这种方式阅读代码会更自然。

“因为我觉得这样更容易看。”-但是我们怎么解决这个问题呢?最后一个词:
[l for l in open('data.txt')][-1]。拆分(':')[-1]。strip()
@SimeonVisser:你说得对,我只是希望我的解释能给你一个提示,我想如果我发布了我想要实现的东西,会让所有人都失望,因为我是新手。但可以肯定的是,从现在起,我将始终添加其余的代码。谢谢您的评论。@B抱歉,我没有相同的键盘,无法正确键入您的名字。我试了你的建议,但只取了清单上的最后一行。也许是我,我对这个很陌生,但是谢谢你的帮助谢谢你指出
打印
功能的附加功能。很高兴知道。@zenpoy:非常感谢,我尝试了你的建议,但我很挣扎,因为我对python和编码/脚本非常陌生。再次感谢你。我阅读了你的建议,这让你的方式更有意义,我上面的代码是我的第一个脚本,但感谢你的深入解释,我会在这方面有所改进,我相信很多其他人也会从中受益。上帝保佑你。p、 s我用你的代码来解决我的问题:DNo问题,你解决了你的问题,但来这里寻求更好的方法。如果这样使用SO/CR,您将学习得更快。