使用 Python 在 Blender Game Engine 中拆分 CSV 数据

Splitting CSV data in Blender Game Engine with Python

我正在 BGE 中进行一个小项目,并尝试将 data.txt 导入到 data.csv 文件,然后将数据拆分为 2 列。

我的 data.txt 看起来像这样;

Breathing rate:, 1.0
Pulse:, 140
Spinal Injury:, Yes

如您所料,我想要“,”作为列的分隔符。

这是我当前的代码;

try:
    file = open(path+"dialogue.txt", 'r')
    info = file.readlines()
    own.text = str(info[currentLineNumber])
except:
    own.text = "end of script"

column1 = []
column2 = []
if own ["currentLine"] == 10:
    own.sendMessage("resume")
    with open(path+"data.txt", 'r') as in_file:
        stripped = (line.strip() for line in in_file)
        datalines = (line.split(",") for line in stripped if line)
        with open(path+"data.csv", 'w') as out_file:
            writer = csv.writer(out_file)
            writer.writerow(('subject', 'value'))
            writer.writerow(('ID: ', (uuid.uuid1())))
            writer.writerows(datalines)
os.rename(path+"data.csv", path+"newData.csv")
with open('newData.csv', 'r') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        column1.append(row[0])
        column2.append(row[1])

我可以将数据导入 data.csv 但我不能将数据拆分成列,所有导入的数据都在一个列中。我该如何解决这个问题?

至少如果你的例子中的格式是一致的,你可以这样做:

datafile = "path/to/textfile"
with open (datafile, 'rt') as filehandle:
   csv_reader = csv.reader(filehandle, delimiter = ',')
   data = [row for row in csv_reader]

这会将逗号分隔的对收集到一个列表列表中,如下所示:

[['Breathing rate:', ' 1.0'], ['Pulse:', ' 140'], ['Spinal Injury:', ' Yes']]

如果您想要的数据是较大文件的子集,您可以将其复制到 stringIO 对象中,然后将其传递给 csv reader;它看起来像 reader 的磁盘文件。这是一个简单的例子:

import StringIO
filtered_data = StringIO.StringIO()
with open(datafile, 'rt') as originalfile:
     for line in originalfile:
        if ":," in line:  # your real criteria would go here...
            filtered_data.write(line.strip() + "\n")

# rewind to beginning of your stringIO
filtered_data.seek(0) 
csv_reader = csv.reader(filtered_data, delimiter = ',')
data = [row for row in csv_reader]

我只是猜测实际上找到好的行的标准是什么——你可以使用你需要的任何逻辑来只选择逗号分隔的行