【问题标题】:Python 2.7 copy file not completePython 2.7 复制文件不完整
【发布时间】:2018-07-28 18:07:14
【问题描述】:

我正在尝试将文件从本地驱动器复制到网络存储。该文件是一个 6380 行的 TXT 文件。打开Target文件,文件拷贝不完整,停在行中间的6285行。文件本身是一个 103 kb 的 G 代码。

源文件第 6285 行:“Z17.168 Y7.393”,文件继续...

目标文件第 6285 行:“Z17.168 Y7.3”之后是文件的结尾。

我厌倦了几种不同的复制操作:

from shutil import copyfile
copyfile(WorkDir + FileName, CNCDir + FileName)

os.system("copy "+WorkDir + FileName +" " + CNCDir + FileName)

或者也可以使用 DOS XCOPY 命令。 奇怪的是,如果我在单独的 dos 窗口中使用相同的语法执行复制命令,它可以完美运行,只需从 PYTHON 脚本执行它,它就不会复制完整的文件。

有什么想法吗?

【问题讨论】:

  • 文件是USBCNC4.0.x类型吗?
  • G 代码本身是用“F-Engrave”创建的,它也是基于 pyhton 的。我以批处理模式提取 G 代码并创建自己的文件。所以这不是一种特殊的格式或合成器。它只是一个 TXT 文件,我将 ot 重命名为 .SPF 用于 CNC 子程序。
  • F-Engrave 看起来不错。尝试选项 3,看看它是否只是内存加载问题。

标签: python-2.7 os.system file-copying


【解决方案1】:

使用以下方法获取一些“调试”构造:

选项1(钝读,应将内容打印到cmd控制台或编辑器标准输出):

file = open(“testfile.text”, “r”) 
print file.read() 

选项2(读取+加载文件内容到内存,将内容从内存写入新文件):

file          = open(“testfile.text”, “r”)
count_lines   = 0
counted_lines = 6380 
content       = []

for line in file:

    count_line += 1
    content.append(line)
    print 'row :  "%s" content : "%s"' % (count_lines, file)

if counted_lines == count_lines:
    dest_file = open(“new_testfile.txt”,”w”)
    for item in content:
        dest_file.write(item)
    dest_file.close()
else:
    print 'error at line : %s' % count_lines

选项 3(排除第 6285 行的字符问题并显示其内存加载问题):

from itertools import islice

# Print the "6285th" line.
with open(“testfile.text”) as lines:
    for line in islice(lines, 6284, 6285):
        print line

选项 4 找到 here

选项 5 是:

import linecache

linecache.getline(“testfile.text”, 2685)

【讨论】:

  • 稍作修改,您可以从选项 3 进行批量处理,并将读/写分成两部分:1) 行 (1,600) 和 2) 行 (6001, 6380) 并粘贴它们其中“6284”、“6285”被写下来。
  • 是的,我的解决方法是我将 G 代码保存在一个文件中,然后将第二个输出文件写入驱动器。这就是我现在解决它的方法。仍然那么我很感兴趣为什么文件的副本不起作用。
  • 奇怪...没有一个选项成功...我几乎开始相信您在特定位置的 HDD 或 SDD 上有一个坏扇区。尝试保持文件原样并生成一个具有不同名称的新文件。如果这可行,则进行一些磁盘驱动器诊断...读取/写入 100mb 文件就像用“两根手指插在鼻子上”驾驶 python ;-)
  • 好的,现在我从网络驱动器更改为本地驱动器。还是同样的问题。第 6285 行,但这次它停在“Z”处。我不认为这是硬盘的问题。我在 Windows 中使用 .bat 文件启动 .py 脚本。还有一个选项可以在此处添加复制命令,但仍然是一种解决方法,但它不起作用。
  • 大声笑......然后我们在某处坚持一个未知的缓存问题......也许检查python和其他库的软件版本到最新?也许你可以通过这种方式摆脱它。或者只是冷启动您的电脑..作为最后的手段可能会有所帮助。无论如何,您的解决方法有效...... GL .. 我正在记录一些真实世界的事情,比如在公园里散步。也许其他人有一些“调试”解决方案来找到这个“错误”。
【解决方案2】:

在目标文件上使用选项 1 给我:

Z17.154 Y7.462
Z17.159 Y7.439
Z17.163 Y7.416
Z17.168 Y7.3
"done"
Press any key to continue . . .

使用选项 2 给出:

row :  "6284" content : "<open file 'Z:\\10-Trash\\APR_Custom.SPF', mode 'r' at 0x0000000004800AE0>"
row :  "6285" content : "<open file 'Z:\\10-Trash\\APR_Custom.SPF', mode 'r' at 0x0000000004800AE0>"

还有一个与目标文件内容相同的TXT文件:

最后 3 行:

Z17.159 Y7.439
Z17.163 Y7.416
Z17.168 Y7.3

我也尝试了选项 4 -6,但我没有看到其背后的目的。使用选项 5,我不得不将行号更改为 6284,因为列表超出了该数字的范围。

from itertools import islice

# Print the "6285th" line.
with open(CNCDir + FileName) as lines:
    for line in islice(lines, 6284, 6285):
        print "Option 3:"
        print line

f=open(CNCDir + FileName)
lines=f.readlines()
print "Option 4:"
print lines[6284]

import linecache
print "Option 5:"
print linecache.getline(CNCDir + FileName, 6285)

从命令行输出文件:

    Copy to CNC:

Source: C:\F-Engrave\WorkDir\APR_Custom.SPF
Traget: Z:\10-Trash\APR_Custom.SPF

Option 3:
Z17.168 Y7.3
Option 4:
Z17.168 Y7.3
Option 5:
Z17.168 Y7.3

"done"
Press any key to contiune. . .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 2016-06-22
    • 2021-03-11
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 2021-09-08
    相关资源
    最近更新 更多