【问题标题】:copy content of file to another file using python script使用python脚本将文件内容复制到另一个文件
【发布时间】:2016-03-30 05:59:53
【问题描述】:

我有这个 python 脚本,它打开一个文件对话框并选择一个文本文件而不是将其内容复制到另一个文件。

当我打开第二个文件时它仍然是空的

谁能帮我解决这个问题?

OPenDirectory.py

#!/usr/bin/python

import Tkinter 
import tkFileDialog

''''Open txt files in the selected path '''
def OpenRead():

    Tkinter.Tk().withdraw()
    in_path = tkFileDialog.askopenfile(initialdir = 'C:\Users\LT GM\Downloads', filetypes=[('text files', ' TXT ')])
    readingFile = in_path.read()
    writeFile = open ('copiedFile.txt', 'w')
    writeFile.write(readingFile)
    print " we'r done!!" 
    in_path.close()
    writeFile.close()


if __name__== "__main__":
    OpenRead()

【问题讨论】:

  • 尝试指定输出文件的完整路径,例如writeFile = open ('c:\\copiedFile.txt', 'w')。结果文件还是空的吗?

标签: python error-handling openfiledialog read-write


【解决方案1】:

逐行复制文件到文件的方式:

#!/usr/bin/python

from os import listdir
from os.path import isfile, join

def readWrite():
    mypath = 'D:\\'
    files = [f for f in listdir(mypath) if isfile(join(mypath, f))]
    for file in files:
        if file.split('.')[1] == 'txt':
            outputFileName = 'out-' + file
            with open(mypath+outputFileName, 'w') as w:
                with open(mypath+file) as f:
                    for l in f:
                        print l
                        w.write(l)

if __name__== "__main__":
    readWrite()

更新: 更新了上面的代码,所以它读取指定目录中的所有txt文件并将它们复制到其他文件中。您可以随心所欲地使用目录。我还添加了一个 "print l",它将打印传入文件的内容。

【讨论】:

  • 我更新了我的答案,所以它会读取指定目录中的所有 txt 文件并复制它们
  • 我使用了你的代码,它读取了文件,但没有复制或写入第二个文件的内容
  • 你这样做的方式肯定有问题..对我有用,对其他人也有类似的方法..
  • @ admix 我解决了问题,它是路径我不知道究竟是什么问题,但我改变了通行证并且它起作用了......我的第二个问题将是关于这个文件的类型基于字符串.....谢谢
  • 太棒了,没问题:)
【解决方案2】:

您可以使用shutil.copyfile,无需打开或读取文件。

from shutil import copyfile

copyfile("source","dest")

所以对于你的代码:

 def OpenRead():
    Tkinter.Tk().withdraw()
    in_path = tkFileDialog.askopenfile(initialdir = 'C:\Users\LT GM\Downloads', filetypes=[('text files', ' TXT ')])
    copyfile(in_path.name, 'copiedFile.txt')
    print " we'r done!!"
if __name__== "__main__":
    OpenRead()

该文件也将被复制给您 pwd,因此如果您希望将其保存在某个特定位置,则需要传递完整路径。

【讨论】:

  • 我也试过你的代码,但copyFile.txt仍然是空的
  • @Jihad3aramouni,你知道那是什么吗?因为你传入的文件是空的。这会复制您打开的任何文件,但如果文件为空,则无需复制太多
  • @Padraic Cunningham 用户选择的文件并将其保存在变量 in_path 它不是空的,文件大小为 144 kb,因此逻辑是为复制的File.txt 是不是这样?因为也许我在这里错过了重点
  • @Jihad3aramouni,你打开的任何文件都会被复制到目的地,所以唯一不会发生的方法是如果你传入的文件是空的,你在哪里找文件?
  • 复制的文件位于源文件的同一位置,我已将文件的内容打印到控制台,并且绝对不为空
【解决方案3】:

readingFile = in_path.read() 读取文件的内容并将其放入变量 readingFile 假设文件的内容是,比如说,你好,readingFile 的值就是你好

destinationFile = readingFile, '.txt' destinationFile 是一个元组,其值为 '','.txt' 改为使用 destinationFile = readingFile+'.txt'

这会奏效。但最终结果不会是您所期望的。结果将是一个文件,其名称作为读取文件的内容,其内容也相同。最好在 destinationFile 中指定一个文件名,例如 destinationFile = 'destfile.txt'

【讨论】:

  • 那么如何将读取文件的内容获取到目标文件中呢?
  • 这对我来说很好 'import Tkinter import tkFileDialog ''''Open txt files in the selected path ''' def OpenRead(): Tkinter.Tk().withdraw() in_path = tkFileDialog. askopenfile(initialdir = 'C:\Users\LT GM\Downloads', filetypes=[('text files', 'TXT')]) readingFile = in_path.read() writeFile = open ('copiedFile.txt', 'w ') writeFile.write(readingFile) 打印“我们完成了!!” in_path.close() writeFile.close() if name__== "__main": OpenRead()'
  • 什么适合你??复制的文件在这里仍然是空的,所以我在这里缺少什么??
【解决方案4】:

你为什么不直接使用 os 和 shell 复制命令。

import os 
start= '~/user/file'
dest= '~/user/folder1/file'

os.system('cp %s %s' %(start,dest))

【讨论】:

  • 因为如果我理解您的问题,我需要让最终用户熟悉该程序
  • @Jihad3aramouni 你说的熟悉是什么意思?这需要一个文件,并使用您希望给它的任何名称复制到您希望的任何位置。这一切都是在 python 中完成的,因此最终用户不必看到它,即使他们这样做也是非常自我解释的:cp 。你只需要将它添加到你的循环中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多