2012-05-05 2 views
4

루트 디렉토리 아래의 일부 폴더에 다른 수의 dbf 파일이 있다고 가정합니다 (d:\myfolder). DBF 파일의 내용은 다음과 같습니다 : 나는 Field2의 값의 마지막 4 자리 숫자를 포함하는 (말하자면 Field1을) 필드를 추가 할Python에서 dbf 파일을 수정하는 방법

Field1 
11110481123 
12150480021 
... 

.

Field1   Field2 
11110481123  1123 
12150480021  0021 
...    ... 

그런 다음 Field1을 삭제하고 싶습니다.

어떻게 파이썬의 다른 폴더에 분산되어있는 모든 dbf 파일에 대해 작업을 수행 할 수 있습니까?

답변

4

pypi (pip install dbf)를 통해 dbf 모듈을 사용할 수 있어야합니다. 다음은 테이블에서 필드를 추가 및 삭제할 수있는 방법의 조각입니다 :

import dbf 

table = dbf.Table('t1', 'field1 N(12, 0)') 
for record in ((11110481123,), (12150480021,)): 
    table.append(record) 
table.close() 

# extend the existing table 
dbf.add_fields('t1', 'field2 N(4, 0)') 

table = dbf.Table('t1') 
records = table.sql('select *') 
for record in records: 
    record.field2 = int(str(record.field1)[-4:]) 
table.close() 

dbf.delete_fields('t1', 'field1') 

그냥 첫 번째 필드 가서 그 값의 마지막 4 자리 숫자를 저장하기 위해 그것을 변경하는 집중적 인 적은 계산 될 것이다지만.

+0

((11110481123,), (12150480021,)) : 여기에 많은 레코드가있는 경우 어떻게 이러한 레코드를 사용할 수 있습니까? 나는 모든 기록을 입력 할 수 없다고 생각합니다. –

1

(약) 단계를 상기 dbf library (플러스 내 다른 도서관, antipathy)이은을 사용하여 당신은 걸릴 것 :

# untested 

import dbf 
from antipathy import Path 

for path, dirs, files in Path.walk('.'): 
    files = [f for f in files if f.ext == '.dbf'] 
    for db in files: 
     if I_want_to_change_this_table(db): 
      with dbf.Table(db) as db: 
       db.add_fields('Field2 C(4)') 
       for record in db: 
        dbf.write(Field2=record.Field1[-4:]) 
       db.delete_fields('Field1') 
       db.pack() 

I_want_to_change_this_table()을 당신이 '돈 경우 사용자가 제공하는 기능을 모든 테이블을 변경하고 싶을뿐입니다. 모든 항목을 변경하려면 해당 행을 제거 할 수 있습니다.

관련 문제