2017-07-12 58 views
0

我試圖用Python自動化無聊的東西。這幾乎完成,但我有一個列表中的字符串問題。列表中的字符串大小限制

我從.txt文件中逐行收集一些數據,我把它放在一個列表中,我改變了一些需要改變的字符串。

問題是,我的列表中的字符串的長度似乎受前一個(我的案例中的文本字符串)的長度限制。

例如,如果要恢復len(data[0]) = 5。如果我試圖把一個字符串放在6個或更多字符中,它將被剪切。

我該如何處理?一個主意?

謝謝。

編輯:

def dxf_copy_lines(f): 
    text = f.readlines() 
    i = 0 
    lines_copied = [] 
    lines_to_delete = set(()) 
    while text[i] != 'TEXT\n': 
     i = i + 1 
    j = i 
    while text[j] != 'VIEWPORT\n': 
     lines_copied = np.append(lines_copied, text[j]) 
     j = j + 1 
    print(lines_copied) 
    return lines_copied 

def modify_lines(lines_copied, ref_dim, id_f,num): 

    n = len(lines_copied) 
    for i in range(n): 
     print (lines_copied[i][0:5]) 
     if lines_copied[i][0:5] == 'nazwa': 
      lines_copied[i] = ref_dim.rstrip() + ' Pos. '+ id_f.rstrip() 
     if lines_copied[i][0:3] == 'szt': 
      lines_copied[i] = 'szt: ' + num +'\n' 
    print(lines_copied) 
    return lines_copied 
+5

如果你需要幫助弄清楚它有什麼問題,你將需要發佈你的代碼。 – perigon

+0

你可以在這裏發佈你的代碼嗎? – Sriram

+0

發佈代碼,在這裏很重要。 – BrightOne

回答

1

問題是你正在使用numpy陣列。這當然不是數組,而是數組的一個使用案例。試想一下:

>>> import numpy as np 
>>> lines = [] 
>>> text = ['abc','de','fghk','lmnop','qrs'] 
>>> for line in text: 
...  lines = np.append(lines, line) 
... 
>>> lines 
array(['abc', 'de', 'fghk', 'lmnop', 'qrs'], 
     dtype='<U32') 

所以linesdtype='<U32'一個numpy.ndarray。數組元素假設爲固定大小。這就是允許numpy做快速的數值計算。所以,dtype='<U32'意味着你的陣列是在32大小的Unicode的字符串考慮的,如果我試圖改變我的數組的元素用字符串比32大發生的情況:

>>> lines[2] = "this is an extremely, very very very, long long long, line" 
>>> lines 
array(['abc', 'de', 'this is an extremely, very very ', 'lmnop', 'qrs'], 
     dtype='<U32') 

它被截斷!

>>> len('this is an extremely, very very ') 
32 

希望這是有道理的。

這實際上並不是numpy的使用情況,它實際上是較慢的這裏。以下操作:

lines_copied = np.append(lines_copied, text[j]) 

是O(N)。既然你是在一個循環中進行它,它會按比例縮放。另一方面,Python列表,你可以使用my_list.append(a_string),這將是一個恆定的時間操作!

相關問題