所以我有一个python脚本从文本文件中获取文本,可以"制表" (放入类似表格的形式)该文件中的行,将最终格式化的文本写入另一个文本文件;
i=0
k=4 #determains columns of "tabular" form
f1 = open("lines-grouped.txt", 'wb')
with open("lines-to-group.txt", 'r') as multilines_filea:
multilines = multilines_filea.readlines()
for line in multilines:
line = line.strip()
if i == k-1:
i=0
f1.writelines([bytes(line + '\r\n','UTF-8')])
else:
f1.writelines([bytes(line + ' | ','UTF-8')])
i=i+1
multilines_filea.close()
f1.close()
这里有一个主要的限制我认为Automator服务会解决,也就是说我想要制表的任何文本片段都需要保存在我的" lines-to-group.txt"文件。
理想情况下,我希望它如此简单;
on run(input, parameters)
-- My Python Logic to manipulate "input"
return input
end run
其中input是任何应用程序中的选定文本。然后,当我遇到以下问题时(我在将表格从富文本格式复制到Evernote时发现);
Name
Age
Position
Salary
John Doe
21
Test Analyst
$60,000
Joe Dirt
30
Janitor
$30,000
Jane Doe
55
Executive
$150,000
我可以在当前音符/文件中选择所有内容,然后运行Automator服务来获取;
Name | Age | Position | Salary
John Doe | 21 | Test Analyst | $60,000
Joe Dirt | 30 | Janitor | $30,000
Jane Doe | 55 | Executive | $150,000
我的python代码现在给了我什么,但我必须把我想要的格式化到另一个文件然后运行脚本然后从我的输出文件中复制格式化的文本,这太简单了。 / p>
所以真正的问题是;我如何获得Applecript来处理我的"输入"我的python脚本读取和处理其输入的方式?
答案 0 :(得分:0)
这就是你如何做到的。首先制作Python脚本的oneliner,就像这样(这里的前两行只是用于测试的输入):
s = 'Name\nAge\nPosition\nSalary\nJohn Doe\n21\nTest Analyst\n$60,000' #partial list
k = '4'
print '\n'.join([' | '.join(s.split('\n')[i:i+int(k)]) for i in range(0,len(s.split('\n')),int(k))])
然后,您可以在AppleScript中将Python代码作为shell脚本运行。您可以使用Python sys
库传入输入值,将 s 和 k 替换为sys.argv[1]
和sys.argv[2]
。因此,您放入Automator / AppleScript的最终代码如下所示:
on run {input, parameters}
set numberOfColumns to 4
repeat with selectedText in input
set pythonScript to "import sys; print '\\n'.join([' | '.join(sys.argv[1].split('\\n')[i:i+int(sys.argv[2])]) for i in range(0,len(sys.argv[1].split('\\n')),int(sys.argv[2]))])"
set result to do shell script "python -c " & quoted form of pythonScript & space & quoted form of selectedText & space & numberOfColumns
end repeat
end run
设置服务在任何应用程序中接收选定的“文本”,勾选输出替换所选文本,然后它应该可以工作,即如果您在编辑的应用程序中使用它已启用。 玩得开心!
答案 1 :(得分:0)
大多数最终答案来自turningtested,但他们的最初\\n
对我没有任何作用(对于其他人,我不知道,\\r
做了相同),所以我做了一个明确可识别的分隔符|><|
然后将result
更改为preresult
并添加;
set AppleScript's text item delimiters to {"|><|"}
set result to every text item of preresult
脚本完全按照我的需要运行,将选定的文本列表为numberOfColumns
列(item | item | item | ... \ newline)。
on run {input, parameters}
set numberOfColumns to 3 -- Column Number May add UI to input on demand
repeat with selectedText in input
set pythonScript to "import sys; print '|><|'.join([' | '.join(sys.argv[1].split('\\n')[i:i+int(sys.argv[2])]) for i in range(0,len(sys.argv[1].split('\\n')),int(sys.argv[2]))])"
set preresult to do shell script "python -c" & quoted form of pythonScript & space & quoted form of selectedText & space & numberOfColumns
end repeat
set AppleScript's text item delimiters to {"|><|"}
set result to every text item of preresult
end run