Python 2.7复制文件不完整

时间:2018-02-18 09:52:47

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

我正在尝试将文件从本地驱动器复制到网络存储。该文件是一个包含6380行的TXT文件。打开目标文件,文件的副本不完整,它在行中间的第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脚本执行它,它就不会复制完整的文件。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

使用以下内容获取一些“调试”构造:

选项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)

答案 1 :(得分:0)

在目标文件上使用选项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. . .