如何将.txt文件保存到python中

时间:2018-06-07 23:13:32

标签: python file-writing

我正在尝试编写一小段代码,这样我就可以将Raspberry Pi的序列号和日期/时间写入文本文件。每次将信息插入我的Raspberry Pi时,此信息都会写入USB记忆棒。这个脚本将用于具有不同USB记忆棒的多个Raspberry Pi,所以我一直试图尽可能通用,因为硬件之间的路径会发生变化等。

我的脚本的第一部分工作正常:

    #import packages
    from datetime import datetime
    import os
    import os.path
    from shutil import copyfile

    usblist = [x for x in usblist if not x.startswith('SETTINGS')] #For some reason I have some folders starting with SETTINGS that I don't want to delete but simply ignore in my list

    #create a new list with the paths for each USB
    usbpathlist = os.path.abspath(usblist[0]),os.path.abspath(usblist[1]) #I will only have two USB sticks inserted at a time

    #for some reason my paths show as in the /home/ directory when it appears that they are mounted in /media/
    usbpathlist = [w.replace('home', 'media') for w in usbpathlist] #this fixes the paths

然后我提取Raspberry Pi独有的信息和日期/时间并将它们保存为变量

    def getserial():
        #Extract the serial number from the cpuinfo file
        cpuserial = "0000000000000000"
        try:
            f = open("/proc/cpuinfo", "r")
            for line in f.readlines():
                if line[0:6] == "Serial":
                    cpuserial = line[10:26]
                    f.close()
        except:
            cpuserial = "ERROR00000000000"
        return cpuserial

    rpi_serial = getserial()

    time_experiment = str(datetime.now())

现在我将此信息写为文本文件

    with open("rpi_information.txt", "w") as rpi_information:
        rpi_information.write("Raspberry Pi Serial Number: " + rpi_serial + "\n") #Write the serial number
        rpi_information.write("Time written: " + time_experiment + "\n") #Write the date
        rpi_information.close()

最后,我的脚本中有问题的部分是我尝试将此文件保存到我上面已保存的USB记忆棒路径中的位置' usbpathlist'

    for d in usbpathlist:
        copyfile(rpi_information, d)

从这里开始我的问题所在 - 我花了很多时间在谷歌搜索和搜索这个网站,但我一直无法弄清楚如何在创建后将这个文件保存到每个USB记忆棒。网上有很多信息表明我实际上不能同时将文本文件保存到多个位置,但这似乎不太可能。如果我手动将路径插入" rpi_information.txt"上面,它没有问题。我的问题是,因为我的USB记忆棒会有所不同,所以这些路径会发生变化,所以我不认为这是一个很好的解决方案。我从脚本的最后一部分(可能是预期的)收到的错误是:

    Traceback (most recent call last):
      File "home/pi/test.py", line 55 in <module> #test.py is my filename
        copyfile(rpi_information, d)
      File "/usr/lib/python3.5/shutil.py", line 103, in copyfile
        if _samefile(src,dst):
      File "/usr/lib/python3.5/shutil.py", line 88, in samefile
        return os.path.samefile(src,dst)
      File "/usr/lib/python3.5/genericpath.py", line 90, in samefile
        s1 = os.stat(f1)
    TypeError: argument should be string, bytes, or integer, not _io.TextWrapper

最终,我想找到一种方法将此文件传递给两个USB记忆棒。我希望将此信息保存为文本文件,因为我希望稍后在另一台计算机上引用它。任何有关如何使这项工作的见解将不胜感激或任何关于如何改进我的代码的意见也将不胜感激。这是我的第一个python脚本和我在StackOverFlow上的第一个问题(即使我潜伏了多年),所以请放轻松我吧!我已经阅读了很多关于这个问题的文档,所以我只是感到困惑。感谢您的帮助。

--- --- EDIT 下面的用户Vulcan表示我的错误是未能包括&#34; .txt&#34;在copyfile函数中。我之前试过这个也无济于事。不幸的是,这会产生错误:

    Traceback (most recent call last):
      File "home/pi/test.py", line 55 in <module> #test.py is my filename
        copyfile(rpi_information.txt, d)
    AttributeError: '_io.TextWrapper' object has no attribute 'txt'

1 个答案:

答案 0 :(得分:0)

错误跟踪突出显示了您的问题:argument should be string... not _io.TextWrapper。当您调用copyfile(rpi_information, d)时,rpi_information成员是文件句柄,而不是文件路径,copyfile期望的文件类型之一。传递文件名:

for d in usbpathlist:
    copyfile('rpi_information.txt', d)