有谁知道如何在不使用processing.py或其他第三方库或平台的情况下读取python文件?我有一个可以生成文本的python文件,并希望我的处理实时读取它。但是似乎“ loadStrings”东西出了问题,因为我的三行文本不是同时生成的,所以我的第三行总是显示得比前两行慢一些,因此处理草图将其弄乱了在某一点。该如何处理?
String[] lines;
PFont font;
void setup() {
size(800, 600);
font = createFont("Arial", 16);
frameRate(2);
//lines = loadStrings("output.txt");
}
void draw() {
background(255);
textFont(font);
fill(0);
lines = loadStrings("output.txt");
for (int i = 0; i < 3; i++) {
String word = lines[i];
text(word, random(width), random(height));
}
// noLoop();
}
我的python草图:
class MarkovGenerator(object):
def __init__(self, n, max):
self.n = n # order (length) of ngrams
self.max = max # maximum number of elements to generate
self.ngrams = dict() # ngrams as keys; next elements as values
beginning = tuple(["China", "is"]) # beginning ngram of every line
beginning2 = tuple(["But", "it"])
self.beginnings = list()
self.beginnings.append(beginning)
self.beginnings.append(beginning2)
def tokenize(self, text):
return text.split(" ")
def feed(self, text):
tokens = self.tokenize(text)
# discard this line if it's too short
if len(tokens) < self.n:
return
# store the first ngram of this line
#beginning = tuple(tokens[:self.n])
#self.beginnings.append(beginning)
for i in range(len(tokens) - self.n):
gram = tuple(tokens[i:i+self.n])
next = tokens[i+self.n] # get the element after the gram
# if we've already seen this ngram, append; otherwise, set the
# value for this key as a new list
if gram in self.ngrams:
self.ngrams[gram].append(next)
else:
self.ngrams[gram] = [next]
# called from generate() to join together generated elements
def concatenate(self, source):
haha = list()
kk = list()
haha = " ".join(source)
ouou = haha.split(".")
kk = ouou[0]
return kk
# return " ".join(source)
# generate a text from the information in self.ngrams
def generate(self,i):
from random import choice
# get a random line beginning; convert to a list.
#current = choice(self.beginnings)
current = self.beginnings[i]
output = list(current)
for i in range(self.max):
if current in self.ngrams:
possible_next = self.ngrams[current]
next = choice(possible_next)
output.append(next)
# get the last N entries of the output; we'll use this to look up
# an ngram in the next iteration of the loop
current = tuple(output[-self.n:])
else:
break
output_str = self.concatenate(output)
return output_str
def search_facebook_posts(self):
import json
import urllib
import time
FB = list()
query = {'q': "feel", 'limit': 200}
resp = urllib.urlopen('http://graph.facebook.com/search?' + urllib.urlencode(query))
data = json.loads(resp.read())
posts = list()
for item in data['data']:
if 'message' in item:
posts.append(item)
for post in posts:
FB.append(post['message'].encode('ascii', 'replace'))
return FB
def together(self):
import re
sentences = list()
manysentences = list()
togetherlist = self.search_facebook_posts()
for line in togetherlist:
line = line.replace(".", "\n")
line = line.replace(",", "\n")
line = line.replace("?", "\n")
line = line.replace(";", "\n")
line = line.replace("!", "\n")
line = line.replace("...", "\n")
line = line.replace(":", "\n")
sentenca = line.split("\n")
for i in range(len(sentenca)):
sentences.append(sentenca[i])
for sentence in sentences:
if "feel" in sentence:
for matching in re.findall(r'\b[Ff]eel(.*)$',sentence):
manysentences.append(matching)
sentencesnew = random.choice(manysentences)
haha = "I feel" + sentencesnew
return haha
def namelist(self):
import random
namelisty = list()
for line in open("namelist"):
namelisty.append(line+"said")
thisname = random.choice(namelisty)
return thisname
if __name__ == '__main__':
import sys
import random
import codecs
generator = MarkovGenerator(n=2, max=16)
for line in open("china"):
line = line.strip()
generator.feed(line)
print generator.together()+"."
参考方案
您可以使用Java的Runtime和Process类:
import java.io.*;
void setup() {
try {
Process p = Runtime.getRuntime().exec("python /path/to/your/script.py arguments");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=null;
while((line=input.readLine()) != null) {
System.out.println(line);
}
int exitWith = p.waitFor();
System.out.println("Exited with error code "+exitWith);
}
catch (Exception e) {
e.printStackTrace();
}
}
因此,例如最小的ten.py:
import sys
if len(sys.argv) > 0:
print sys.argv[1] * 10
我会看到一条消息打印了10次:
import java.io.*;
void setup() {
try {
Process p = Runtime.getRuntime().exec("python /Users/hm/Documents/Processing/tests/CMD/ten.py hello");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=null;
while((line=input.readLine()) != null) {
System.out.println(line);
}
int exitWith = p.waitFor();
System.out.println("Exited with error code "+exitWith);
}
catch (Exception e) {
e.printStackTrace();
}
}
Java-搜索字符串数组中的字符串 - java在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…
Java Double与BigDecimal - java我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…
当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…
无法将消息从python服务器发送到Java客户端 - java我尝试通过本地网络在Raspberry Pi(Python中的服务器)和Java客户端之间创建客户端/服务器应用程序。我不知道如何将消息从Python服务器发送到Java客户端。我总是遇到错误:[Errno 32]管道损坏。我看不到我错了。这里的服务器代码:class ServerLED(): ''' classdocs …
将列表的python排序转换为Java代码。 - java我正在尝试将将items列表排序为Java代码的python代码进行转换。如何在Java中进行这种排序?python code:import re items = ['10H', '10S', '2H', '3S', '4S', '6C',…