【问题标题】:Python Data ImportPython 数据导入
【发布时间】:2012-04-02 13:35:36
【问题描述】:

我正在使用以下代码在 Python 中导入数据:

 one=[]
 two=[]
 three=[]
 four=[]
 five=[]
 six=[]
 x=0
 for line in open('text.txt', 'r'):
     if x==2:
         column0, column1, column2, column3, column4, column5 = line.split(',')
 else:
    column0, column1, column2, column3, column4, column5 = line.split(' ')
    one.append(column0)
    two.append(column1)
    three.append(column2)
    four.append(column3)
    five.append(column4)
    six.append(column5)
    x=x+1

此代码导入此文本文件:

 1 2 3 4 5 6 
 1 2 3 4 5 6 
 1,2,3,4,5,6
 1 2 3 4 5 6
 1 2 3 4 5 6

但是我在如何导入以下内容时遇到了很多麻烦

 1 2 3 4 5 6 
 1 2 3 4 5 6 
 1,2,3,
 4,5,6 
 1 2 3 4 5 6
 1 2 3 4 5 6

即使数据在第三行有中断,我希望它以与第一个文本文件相同的方式导入。我尝试按行导入,然后使用第三行的变量数,但我无法让它工作。

有没有人知道任何资源或示例或可以提供帮助?谢谢!

【问题讨论】:

  • 是否总是应该每组有六个项目
  • 我想我明白他在问什么。他想将每 6 个元素加载到相应的数组中。
  • 每六个元素,而不是每六个元素。

标签: python import line-breaks


【解决方案1】:

这是一种正确的方法......它不是一个完整的答案,但我认为它可以解决您可能遇到的任何问题

fh  = open('Documents/import.txt').read()

for line in fh.split('\n'):
    print line.strip()
    splits = line.split()
    if  len(splits) ==1 and splits[0]== line.strip():
        splits = [item for item in line.strip().split(',') if item]
    print splits

哎呀...没读到你想要的试试这个

fh  = open('Documents/import.txt').read()
the_list = []
for line in fh.split('\n'):
    print line.strip()
    splits = line.split()
    if  len(splits) ==1 and splits[0]== line.strip():
        splits = line.strip().split(',')
    if splits:the_list.append(splits)

for i in range(len(the_list)):
    print the_list[i]
    if  the_list[i][-1]=='':
        the_list[i].pop(-1)
        the_list[i].extend(the_list[i+1])
        i += 1

print the_list

【讨论】:

  • 您介意解释一下为什么要添加第二个 for 循环吗:for i in range(len(the_list)): print the_list[i] if the_list[i][-1]=='': the_list[i].pop(-1) the_list[i].extend(the_list[i+1]) i += 1
【解决方案2】:
  1. 您在 StackOverflow 上提出了九个问题,但只接受了其中一个的答案?请感谢陌生人和accept some answers的好意。

  2. 说“我试过了,但没用”很好,但是如何没用?错误信息是什么?如果程序的行为出乎意料,您实际上期望什么?

  3. 对于读取逗号(空格?)分隔的数据,我认为您实际上需要python's csv module。通过delimiter 选项的适当参数,它还将读取以空格分隔的数据,或者您可以在读取数据之前用逗号替换空格。

【讨论】:

  • 我不认为csv 可以在这里工作,因为数据不是表格并且分隔符不一致。
  • 如果“非表格”是指它不是一个矩形数字数组,这实际上并不重要 - csv 将根据需要将每行拆分为尽可能多的标记。某些行是否比其他行具有更多标记并不重要。在开始之前,可以通过每次处理运行(用逗号替换空格)来修复不一致的分隔符。
  • “非表格”我的意思是“一行可以分成多行”,请参见第二个示例。 csv 将执行与他当前代码相同的操作,并将数据读取为两行,每行三列。
【解决方案3】:

for line in open('text.txt', 'r'): 行遍历文件中的行。它不注意你的逗号。

如果要按元素而不是按行进行迭代,则必须使用不同的循环。

您可能想阅读这个问题:How to read numbers from file in Python? 它显示了如何一次读取一个数字,忽略换行符。您需要 pass a parameter to the split function 告诉它跳过逗号和空格。

附:在您当前的代码中,if x==2: 什么都不做。如果你真的想计算行数,你需要enumerate 函数。

【讨论】:

    猜你喜欢
    • 2016-04-22
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2019-08-05
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多