使用itertools产品循环使用两个不同文本文件中的变量输出到第三个文本文件时,输出文件的间距有问题

2024-10-04 01:24:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python3.4.1中创建一个简单的打印机删除脚本。可能有更简单的方法可以做到这一点,但这就是我所拥有的:我正在使用来自itertools的产品,从目录中的两个文本文件获取输入—一个是服务器列表,一个是打印机列表。你知道吗

我现在的代码是:

import webbrowser
from itertools import product
with open('servers.txt') as infile:
    servers = infile.readlines()
with open('PRINTERS_toDelete.txt') as infile:
    queues = infile.readlines()

strTemp1 = 'cscript c:\\windows\\system32\\prnmngr.vbs -d -p %s -s %s \n'
with open('RUN_THIS.txt', 'w') as outfile:
    outfile.writelines(strTemp1 % (queue,server) for queue,server in product(queues,servers))
webbrowser.open('RUN_THIS.txt')

输出文件与我需要的非常接近,但如下所示:

cscript c:\windows\system32\prnmngr.vbs -d -p queue1
 -s server1

cscript c:\windows\system32\prnmngr.vbs -d -p queue1
 -s server2

cscript c:\windows\system32\prnmngr.vbs -d -p queue1
 -s server3 
cscript c:\windows\system32\prnmngr.vbs -d -p queue2
 -s server1

cscript c:\windows\system32\prnmngr.vbs -d -p queue2
 -s server2

cscript c:\windows\system32\prnmngr.vbs -d -p queue2
 -s server3 
cscript c:\windows\system32\prnmngr.vbs -d -p queue3
 -s server1

cscript c:\windows\system32\prnmngr.vbs -d -p queue3
 -s server2

cscript c:\windows\system32\prnmngr.vbs -d -p queue3
 -s server3 
cscript c:\windows\system32\prnmngr.vbs -d -p iHatePrinters -s server1

cscript c:\windows\system32\prnmngr.vbs -d -p iHatePrinters -s server2

cscript c:\windows\system32\prnmngr.vbs -d -p iHatePrinters -s server3 

应该是这样的:

cscript c:\windows\system32\prnmngr.vbs -d -p queue1 -s server1 
cscript c:\windows\system32\prnmngr.vbs -d -p queue1 -s server2
cscript c:\windows\system32\prnmngr.vbs -d -p queue1 -s server3

cscript c:\windows\system32\prnmngr.vbs -d -p queue2 -s server1
cscript c:\windows\system32\prnmngr.vbs -d -p queue2 -s server2
cscript c:\windows\system32\prnmngr.vbs -d -p queue2 -s server3 

cscript c:\windows\system32\prnmngr.vbs -d -p queue3 -s server1
cscript c:\windows\system32\prnmngr.vbs -d -p queue3 -s server2
cscript c:\windows\system32\prnmngr.vbs -d -p queue3 -s server3

cscript c:\windows\system32\prnmngr.vbs -d -p iHatePrinters -s server1 
cscript c:\windows\system32\prnmngr.vbs -d -p iHatePrinters -s server2
cscript c:\windows\system32\prnmngr.vbs -d -p iHatePrinters -s server3 

基本上,在队列和服务器条目之间有一个不需要的换行符。另外,最后一个条目看起来很好(或者至少比前一个更好),所以我认为这与它在每个输入文件中解释硬返回的方式有关。对于不同服务器上的同一个队列,使用不带空格的附加格式以及队列之间的额外换行符是理想的,但不是必需的。你知道吗

我试过用空格键,但运气不好,有什么想法吗?你知道吗


Tags: txtwindowsopeninfileserver1system32vbsqueue2
3条回答

发生这种情况的原因是readlines方法保留您正在读取的文件的每一行的最后一行。 试试这个。你知道吗

import webbrowser
from itertools import product
with open('servers.txt') as infile:
    servers = list(map(str.strip, infile.readlines()))
with open('PRINTERS_toDelete.txt') as infile:
    queues = list(map(str.strip,infile.readlines()))
strTemp1 = 'cscript c:\\windows\\system32\\prnmngr.vbs -d -p %s -s %s\n'
with open('RUN_THIS.txt', 'w') as outfile:
    outfile.writelines(strTemp1 % (queue,server) for queue,server in product(queues,servers))
webbrowser.open('RUN_THIS.txt')

我会这么做:

map(str.strip, servers)   #These lines remove any extra whitespace from reading the data
map(str.strip, queues)  

strTemp1 = 'cscript c:\\windows\\system32\\prnmngr.vbs -d -p %s -s %s \n'

with open('RUN_THIS.txt', 'w') as outfile:
    for q in queues:
        for s in servers:
             outfile.write(strTemp1 % (queue,server))
        outfile.write("\n")

你试过这样的东西吗?你知道吗

with open('RUN_THIS.txt', 'w') as outfile:
    for line in (strTemp1 % (queue,server) for queue,server in product(queues,servers))):
        outfile.write(line.replace('\n',''))
        outfile.write('\n')

相关问题 更多 >